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

いんでぃーづ

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

MENU
{スポンサーリンク}

Unity : コライダのOnCollisionEnter, OnTriggerEnter が呼ばれない、反応しない

Tips Unity

衝突検出に 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がアタッチされていないオブジェクトを動かしてぶつけても、衝突検出できません。

以上のことに気をつければ、だいたいうまくいくでしょう。

Amazon.co.jpアソシエイト