プロジェクト

全般

プロフィール

衝突判定

・オブジェクト
プレイヤー、敵、地面、ゴール地点(旗)
すべてに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だと思う。