2012年11月5日月曜日

Unity初心者が学ぶ「OnTriggerやOnCollisionの判定条件」

前回記事に引き続いてOnTriggerやOnCollisionの判定条件についてUnity Gemsからの翻訳を投稿する:

-------
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 件のコメント:

コメントを投稿

ブックマークに追加

このエントリーをはてなブックマークに追加

自己紹介

自分の写真
Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます

ページビューの合計

過去7日間の人気投稿