レイヤーを変更する処理を行ったところ、エラーが出て成功しない。
ここから前置きのエラー説明。
gameObject.layer = LayerMask.NameToLayer("Enemy");
だとか
gameObject.layer = 15;
といったコードでは
layer numbers must be between 0 and 31
とエラーメッセージが出る。エラー発生元を明かさず凄い勢いで。
LayerMask.NameToLayer("Enemy")を
ウォッチ式で見ても値は15で、本来はこれで動くはず。
試しに15ビット目に1を立ててみる。
gameObject.layer = 1 << 15;
では
A game object can only be in one layer.
The layer needs to be in the range [0...31]
とエラーメッセージが出る。
2^15=32768なのでこれはエラーの通り。
ここまで前置き。
で、エラーを吐き出しているところを調べるために
各コンポーネントのON/OFFを切り替えていたところ、
対称にアタッチしてあるCharacterControllerが吐き出していたことがわかった。
そして、OFF/ONを行うことでエラーが起きなくなることもわかった。
CharacterController hoge = GetComponent<CharacterController>();
gameObject.layer = LayerMask.NameToLayer("Enemy");
hoge.enabled = false;
hoge.enabled = true;
以上のようにすることで、エラーは無くなった。
また、細かい検証はしていないが、
Rigidbody + BoxColliderでは同様のエラーは出なかった。
他にも細かい原因が絡んでいるかもしれないが、
レイヤー変更後のキャラクターコントローラーは一度再起動させる
のが良い、かもしれないとあやふやに終わる
2015/04/29 追記---------------------------------------------------
そんなことなかった
enabledが抜けてるところがあっただけだった
0 件のコメント:
コメントを投稿