TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Unity: OnCollisionXXXとOnTriggerXXXの実行順序

OnCollisionXXXとOnTriggerXXXの実行順序は以下のドキュメントによると
イベント関数の実行順序 - Unity マニュアル
1. OnTriggerXXX
2. OnCollisionXXX
となるようです。

どういう時に役に立つか?

ブロックを破壊した時に「跳ね返って欲しくない場合と跳ね返って欲しい場合」を作る場合、この実行順序の挙動を使って切り分けることができます。

跳ね返って欲しい時はOnCollisionEnter内でGameObjectを破壊すれば、跳ね返りますし、跳ね返って欲しくない場合はOnTriggerEnter内でGameObjectを破壊する処理をすれば、OnCollisionEnterの前に破壊できてしまうので、跳ね返らなくなります。

参考動画 (こんな感じになります)
f:id:TAKOYAKING:20200819032700g:plain

やり方サンプル

GameObject

1. 弾丸に2つのColliderをつけて、片方にはisTriggerにチェックを入れた状態にします。
2. ブロックにColliderをつけます。

スクリプト

OnTriggerEnterに破壊処理を書けばOKです。

  • 跳ね返って欲しい時はOnCollisionEnter
  • 跳ね返って欲しくない時はOnTriggerEnter
void OnTriggerEnter2D(Collider2D collision) {
    Destroy(collision.gameObject); // 跳ね返って欲しくない時
}

// void OnCollisionEnter2D(Collision2D collision) {
// 何も書かない
// }

感想

ブロック貫通して破壊する処理を実装したかったので、お手軽に実装できてよかった!