-
コライダとは、
-
ゲームオブジェクトにアタッチすると
-
他のコライダに反応するコンポーネントであり、
-
そのためには衝突するゲームオブジェクトのどちらかが
-
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)