衝突判定メモ
Rigidbody2D,BoxCollider2Dの衝突判定に関して少し動作検証してみた。
当たり前の動作かもしれないけど、再確認。
・オブジェクト
プレイヤー、敵、地面、ゴール地点(旗)
すべてにRigidbody2D,BoxCollider2Dを付ける。
・スクリプト
適当に書いてプレイヤーが動くようにする。
挙動①
敵のBoxCollider2DのIsTriggerにチェックを入れると物理挙動は無視される。
・想定挙動
プレイヤーと敵の衝突時OnTriggerEnter2Dが呼ばれる。
敵は地面を無視して落下する。
・実際の挙動
プレイヤーと敵の衝突時OnTriggerEnter2Dが呼ばれる。
敵は地面を無視して落下した。
・分かったこと
IsTriggerにチェックを入れると物理挙動は無視されて、OnTriggerEnter2Dが呼ばれる。
Rigidbody2Dをゴール地点(旗)に付けている場合、落下して困るのでBodyTypeをKinematicにする。
それなら地面、ゴール地点(旗)はRigidbody2D要らないと思った。
挙動②
敵のBoxCollider2D IsTriggerにチェックなし、物理挙動が有効になる。
・想定挙動
プレイヤーと敵の衝突時OnCollisionEnter2Dが呼ばれる
敵は地面で止まり落下しない。
・実際の挙動
プレイヤーと敵の衝突時OnCollisionEnter2Dが呼ばれる。
敵は地面で止まり落下しなかった。
・分かったこと
Is Triggerにチェックない場合、OnCollisionEnter2Dが呼ばれるのでこっちで衝突判定をする。
敵とか物理挙動させたい場合は、BoxCollider2DでIsTriggerにチェックをいれちゃダメ(落下するから)、あとBodyTypeをKinematicにすると動かなくなるからダメ。
まとめ
・敵など物理挙動をさせたいオブジェクト
OnCollisionEnter2Dで衝突判定を行う。
項目 | 設定値 |
---|---|
BoxCollider2D | IsTriggerはチェックなし |
Rigidbody2D | BodyTypeはDynamic |
・ゴール地点(旗)など物理挙動不要なオブジェクト
OnTriggerEnter2Dで衝突判定を行う。
物理挙動はいらないのでRigidbody2Dは無くてOKだと思う。