2012年7月23日月曜日

OnCollisionHogeHoge()とOnTriggerHogeHoge()

衝突検知の際に扱う関数といえばOnCollisionEnter()もしくはOnTriggerEnter()ですが、
もうちょっとこれらの関数を知っておくと、より自由に衝突関係を扱うことが出来ます。

まず、衝突関係の関数を列挙します。

Collision系列
OnCollisionEnter(Collision)
OnCollisionStay(Collision)
OnCollisionExit(Collision)

Trigger系列
OnTriggerEnter(Collider)
OnTriggerStay(Collider)
OnTriggerExit(Collider)

Collision系列とTrigger系列の大きな違いとして
Rigidbodyの必要性
があります。

Trigger系列はColliderのIsTriggerのチェックボックスをオンにするだけで良いですが、
Collider系列は衝突したオブジェクト”両方”がColliderとRigidbodyを持っている必要があります。
つまり動くもの同士の衝突検知はOnCollisionHogeHoge()で、
どちらかが動かない場合はOnTriggerHogeHoge()で検知する必要があります。

また、それぞれの引数はCollisionとColliderと若干異なっています。
OnCollisionHogeHoge()では衝突自身を検知できるため引数がCollisionとなり、
OnTriggerHogeHoge()では衝突しているオブジェクトしか検知できないため、Colliderなのではないかと考えられます。

CollisionとColliderの大きな違いとしてContactPoint、
すなわち接点が取得できる出来ないにあると考えられます。

加えて、それぞれのStayおよびExitを使いこなせると自由に衝突関係を扱うことが出来るでしょう。
注意すべきはFugaFugaStay()系列で、OnCollisionStay()でもOnTriggerStay()でも、
有効になっている間はFixedUpdateの度に呼び出されます。これらのなかに重い処理を入れてしまうと簡単に処理落ちしてしまうので注意しましょう。特にMobile向けに開発する際には注意が必要です。



0 件のコメント:

コメントを投稿