コライダとは、
ゲームオブジェクトにアタッチすると
他のコライダに反応するコンポーネントであり、
そのためには衝突するゲームオブジェクトのどちらかが
Rigidbody コンポーネントをアタッチされている必要があります。
コライダには様々な形状や種類があり、
緑色のラインに囲われて
シーンビューで描画されます。
形状は次に挙げるプリミティブ (原始図形) のいずれかです:
Sphere, Capsule, Box です。
より複雑な形状には二つのオプションがあります。
これらのプリミティブ形状のいずれかを
組み合わせるために、別のオブジェクトに
プリミティブ コライダを Hierarchy 上で
適用します。
この workbench オブジェクトには
複数のオブジェクトがあり、
いくつかのエリアの
別のコライダからなっています。
もうひとつのオプションはメッシュ コライダを使用することであり、
これにより指定したメッシュの形状に
完全に一致します。
右の workbench オブジェクトには階層はなく
その代わりにメッシュ コライダを使用します。
メッシュ コライダを使用しない理由は、
指定したメッシュの形状と完全に
一致するためです。
つまり、複雑なモデルのメッシュを指定すると
複雑すぎるコリジョン メッシュを提供するかもしれず
パフォーマンスに影響します。
複合的なセットアップを使用したほうが
良い理由はこのためです。
しかしコリジョンする物体を作成するには
3 つめの選択肢があり、
別のよりシンプルな物体に修正して
メッシュ コライダを使用する方法です。
この例では、複雑なロボット アームの
アセットがあります。
これは非常に複雑なメッシュですが
衝突の際にここまで複雑な
メッシュは必要ではありません。
ここでは
二個目の物体のセットを作成して
一連のメッシュ コライダに適用してます。
例えば爪のこの部分は
そのために作成したコリジョン メッシュよりも
複雑です。
二つの別の FBX ファイルで行われてます。
元のモデル作品と物体をローポリにした物体の
二つです。
それから各々を見ていって、
メッシュ コライダを適用して
使用するコリジョン メッシュとして
ドラッグしてます。
整理するとパフォーマンスのオーバーヘッドなく
衝突という意味で必要な正確性が
得られるということです。
ゲームエンジンで衝突が起こるとき
ひとつのコライダが別のものと衝突して、
OnCollisionEnter がコールされます。
このシーンにおいて prop samoflange オブジェクトには
別の Sphere Collider コンポーネントおよび Rigidbody コンポーネントがあります。
Rigidbody は重量(mass)および重力(gravity)を提供します。
ゲームを再生するとき、ひとつが
倒れて、もう片方に衝突します。
powerCube は Box Collider がアタッチされています。
これは 落下するオブジェクトにも
アタッチされています。
スクリプトは三つの衝突イベントを検知します。
OnCollisionEnter, OnCollisionStay および
OnCollisionExit です。
これらの 各々が発生するとき、
Debug.Log を使用してコンソールに書き込みを行ないます。
Enter がコールされたとき、
Stay が発生したとき、
また、Exit がコールされたときに登録されます。
もしコンソールをみれば
Enter がコールされたか、Stay がしばらくの間発生したか、
また、Exit がコールされたか確認することが出来ます。
もしゲームをポーズして再生すると、
このサンプルをゆっくりと眺めることが出来ます。
コリジョンが発生したときに
フレームごとにステップ実行すると
OnCollisionEnter がコールされているので、OnCollisionEnter は
発生した直後です。
その後続けると、OnCollisionStay が発生しています。
この右側で、
二つのコライダがまだ衝突中であるため
数回これが発生していることを確認できます。
その後続けてステップ実行すると
最終的に二つのコライダが衝突しなくなったとき
OnCollisionExit が
コールされます。
OnCollision メッセージが送信されるためには
衝突する二つのオブジェクトの一つに
Rigidbody コンポーネントがアタッチされている必要があります。
(翻訳:gamesonytablet)