-------
http://unitygems.com/mistakes1/
October 15, 2012
OnTriggerやOnCollisionの判定条件
衝突する双方のオブジェクトにcolliderをアタッチしないと判定は行われない。もしOnCollisionを使用するならばisTriggerでTrueをチェックしない。逆にOnTriggerを使用する場合はisTriggerでTrueをチェックする。追加で以下のルールに従う必要がある。2つの主なルールが存在する:
- OnCollision、OnTriggerメソッドをふくむスクリプトの対象となるゲームオブジェクトにRigidbodyコンポーネントをアタッチすること
isKinematicでTrueをチェックすることでオブジェクトに物理エンジンが作用しないように変更できる
衝突判定はUnityの物理(Physics)エンジン機能の一部である。ゲームで物理エンジンを使用したくない場合であっても衝突判定を使用したい場合はRigidboyコンポーネントを追加する必要がある。isKinematicでTrueをチェックしたRigidbodyはオブジェクトに物理エンジンが作用しない- 衝突するオブジェクトのどちらかのRigidbodyはスリープになっていないことが必要
Unityでパフォーマンスを改善するため、停止したRigidbodyをに自動的にスリープさせる。別のRigidbodyが衝突すると再度Awakeとなる。しかしながらRigidbodyを持たないオブジェクトのcolliderを作成、移動する、もしくはRigidbodyがAwakeでないRigidbodyである場合、衝突判定はスキップされる作成、移動する全てのColliderにKinematicなRigidbodyを必ずアタッチすること。
- 他の重要な考慮点
衝突判定が行われるためには他にもいくつかのルールが存在する。Mesh Colliderは衝突する双方のオブジェクトのConvexでTrueをチェックする必要がある。Convexでないメッシュの衝突判定が必要である場合は衝突する相手方がプリミティブであることが必要条件となる。詳細は後ほど記載
Mesh Colliderは片面であるため、法線が外向きの場合のみ衝突判定が行われる
Mesh Colliderはバックフェースカリング(モデル後面の無視)が適用される
オブジェクトのcolliderは複数のプリミティブから構成することができ、複雑なオブジェクトを再現することができる。必要なことは複数の子オブジェクトを衝突判定させたいオブジェクトにアタッチする。さらにRigidbodyをアタッチしたうえで、プリミティブなcolliderを子オブジェクトにアタッチし、sizeとscaleを適切に設定する。組み合わせた形状が新たなcolliderとなる。
------
複数のColliderを子オブジェクトで構成することで代替する方法というのは有力だとおもう。基本を積み重ねてゲームテクニックを磨こうぜ!
0 件のコメント:
コメントを投稿