Unityのレイヤー毎に接触判定の設定をする

今回はUnityのLayerを使ってオブジェクトの接触の設定を変更します。

それを行うのがPhysicsManagerです。
Edit→Project Settings→Physicsの選択でインスペクタに開く事が出来ます。

PhysicsManagerの使い方は
例えば敵キャラの攻撃の手の部分のレイヤーにEnemyAttackというレイヤーを設定していた場合、他のEnemyとの接触判定をしたくない場合はMatrixのチェックを外します。

スポンサーリンク

UnityのLayer Collision Matrixを使って接触判定するかしないかを設定する

physicmanager1

武器のレイヤーをWeaponとしたら接触判定を行うのは敵キャラだけなので他のオブジェクトの接触判定のチェックを外します。

敵キャラの親元のレイヤーをEnemyにして、実際の当たり判定に使う部分のレイヤーをEnemyHitにした場合。

敵キャラにCharacterControllerの接触範囲があった場合、EnemyのCharacterControllerの接触判定に邪魔されて、EnemyHitの当たり判定がうまく検出されない事があります。

そういう時はWeaponのレイヤーでEnemyのチェックをはずし、EnemyHitのレイヤーにチェックを入れる事で、Enemyのレイヤーの接触判定は行わないように出来ます。

上の画像はサンプルなので、ちゃんとした設定はされていません(^_^;)

レイヤーは32個までしか作れないみたい?なのでレイヤーをタグ代わりに使わず大雑把な枠組みとして使った方がいいです。

またPhysics.Raycastを使ってレイを飛ばし他のコライダと接触しているか判定することが多々ありますが、
Layer Collision Matrixでレイヤー毎に接触判定の設定をしておけば接触しているかどうかの判定をしないので処理速度が上がるかもしれません。

簡単な説明になりましたが、
レイヤー毎に接触判定の有無を設定出来るので味方キャラクター同士は攻撃の接触判定をしないといった設定をすることが出来るようになります。