読者です 読者をやめる 読者になる 読者になる

いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU

Unity : 衝突検出のOnCollisionEnter, OnTriggerEnter が呼ばれない、反応しない(Collision Detection)

Tips Unity

衝突(Collisionや Trigger)検出に OnCollisionEnter, OnCollisionExit, OnCollisionStay, OnTriggerEnter, OnTriggerExit, OnTriggerStay 関数は欠かせないわけですが、これらを使うにもいろいろ制約があります。
引っかかりやすいものを挙げてみました。

タイプミス

まず真っ先にタイプミスを疑うのは基本ですね。努力は自分を裏切らなくても手元は平気で裏切ります。

関数名がOnEnterCollision になってませんか?
引数の型は合ってますか? OnCollisionEnterの引数は Collision型、OnTriggerEnterの引数はCollider型です。

コーンピザ(Collider)を頼んだのに「明太子ピザ(Collision)おまちのお客様!」って呼ばれても誰だってスルーするのです。

void OnCollisionEnter(Collision c) {
}

void OnTriggerEnter(Collider t) {
}

Rigidbodyはアタッチされているか

どちらかのオブジェクトにRigidbodyがアタッチされていなければ、衝突は検出できません。
どちらにアタッチするかは吟味しましょう。たとえば壁にボールをぶつけるという状況で、壁のほうにRigidbodyをつけるのは得策と言えるでしょうか? 否である。

Colliderの Is Trigger チェックボックスの状態

どちらか一方のオブジェクトにチェックがついていれば、呼ばれるのは OnTrigger 〜関数です。
なお、Is Trigger チェックがついていて、かつRigidbodyがアタッチされていないオブジェクトを動かしてぶつけても、衝突検出できません。


2Dなのに3D用の関数を使おうとしていないか

Collider2Dコンポーネントを使用している場合、呼ばれるのはOnCollisionEnter2D もしくは OnTriggerEnter2D 関数です。
次元が同じかどうか確認しましょう。

...気持ちはわかりますが確認しましょう。

        • -

以上のことに気をつければ、だいたいうまくいくと思います!
よい衝突ライフを。

Amazon.co.jpアソシエイト