Unityのコライダーまわりについて少しまとめました
#主なコライダーの種類
##Static Collider(静的コライダー)
###コンポーネント
TriggerがオフのColliderのみ.Rigidbodyはつけない.
###仕様
動かしてはならない.Unityは動かすことをサポートしていない.
他のRigidbodyオブジェクトと衝突するが,自身は動かない.
###主な用途
床,壁など動かないオブジェクト.
##(非Kinematic) Rigidbody Collider
###コンポーネント
- TriggerがオフのCollider
- KinematicがオフのRigidbody
###仕様
物理演算が行われ,ほかのRigidbodyオブジェクトや静的コライダーと衝突することができる.移動は衝突や力によって動かす.transformの変更で動かしてはならない.
###主な用途
物理演算によって動かすオブジェクト.
##Kinematic Rigidbody Collider
###コンポーネント
- TriggerがオフのCollider
- KinematicがオンのRigidbody
###仕様
物理エンジンによる制御を受けない.よって,ほかのRigidbodyオブジェクトと衝突することができるが,自身はそのはね返りによる衝突後の回転や移動の影響を受けない.移動はtransformの変更で動かしてよい.
IsKinematicをオンにすれば即座に物理挙動ができるため,爆発等で吹き飛ばされるキャラクターの手足にもデフォルトで用いられる.ただし,IsKinematicの切り替えはパフォーマンスコストがかかるため頻繁に行ってはならない.
また,他の静的コライダー,Kinematic Rigidbody Colliderとは衝突しないことに注意.
###主な用途
スライドドアのように基本静的コライダーとして振る舞い,時々動かすものに用いる.
#IsTrigger
IsTriggerがオンになっていると,物理エンジンから無視されて衝突はできず,衝突の検出のみがOnTrigger~()でできる.
#IsKinematic
IsKinematicがオンになっていると,物理エンジンによる制御を受けない.
#衝突アクションマトリクス
Unityマニュアルには衝突の検出が行われるかどうかの組み合わせ表がある.つまり,OnCollision~(),OnTrigger~()のコールバック関数が呼ばれるかどうかの表がそれぞれ存在する.
衝突アクションマトリクス(下のほう)
#CharacterController
###仕様
CharacterControllerを使った場合はColliderやRigidbodyは用いない.よってRigidbodyは呼ばれず,現実的な力による制御はされず,衝突のみができる.移動はCharacterController.Move()やSimpleMove()で行う.
衝突のコールバック関数は**OnControllerColliderHit()**であることに注意.
###主な用途
非現実的な挙動をするキャラクター等
#参考
- [Unityマニュアル-コライダー]
(https://docs.unity3d.com/jp/540/Manual/CollidersOverview.html) - [Unityマニュアル-Rigidbody 概要]
(https://docs.unity3d.com/jp/540/Manual/RigidbodiesOverview.html) - [Unityマニュアル-CharacterController]
(https://docs.unity3d.com/ja/540/Manual/class-CharacterController.html)