Unity: OnCollisionXXXとOnTriggerXXXの実行順序
OnCollisionXXXとOnTriggerXXXの実行順序は以下のドキュメントによると
イベント関数の実行順序 - Unity マニュアル
1. OnTriggerXXX
2. OnCollisionXXX
となるようです。
どういう時に役に立つか?
ブロックを破壊した時に「跳ね返って欲しくない場合と跳ね返って欲しい場合」を作る場合、この実行順序の挙動を使って切り分けることができます。
跳ね返って欲しい時はOnCollisionEnter内でGameObjectを破壊すれば、跳ね返りますし、跳ね返って欲しくない場合はOnTriggerEnter内でGameObjectを破壊する処理をすれば、OnCollisionEnterの前に破壊できてしまうので、跳ね返らなくなります。
参考動画 (こんな感じになります)
やり方サンプル
GameObject
1. 弾丸に2つのColliderをつけて、片方にはisTriggerにチェックを入れた状態にします。
2. ブロックにColliderをつけます。
スクリプト
OnTriggerEnterに破壊処理を書けばOKです。
- 跳ね返って欲しい時はOnCollisionEnter
- 跳ね返って欲しくない時はOnTriggerEnter
void OnTriggerEnter2D(Collider2D collision) { Destroy(collision.gameObject); // 跳ね返って欲しくない時 } // void OnCollisionEnter2D(Collision2D collision) { // 何も書かない // }
感想
ブロック貫通して破壊する処理を実装したかったので、お手軽に実装できてよかった!