読者です 読者をやめる 読者になる 読者になる

プログラムの素

スマートフォンアプリ開発に携わっているペーペープログラマのブログです

UnityのPhysicsについて

UnityのPhysicsについて、RigidbodyだとかColliderだとかisKinematicだとかどう設定すればよいのか理解が浅かったので整理してみました。

Rigidbody

まずはRigidbodyについて。

  • オブジェクトに物理挙動を付加するコンポーネント
  • オブジェクトの挙動はRigidbodyにより制御されるため、基本的にはTransformプロパティを変更してはいけない(例外あるので後述)

Collider

続いてColliderについて。

  • 物理的な衝突を目的としたオブジェクトの形が定義されるコンポーネント
  • 目に見えず、オブジェクトのメッシュと同じ形状である必要はない
  • 主なものとして、以下の種類のColliderが存在
    • 3D
    • 2D
      • Box Collider 2D
      • Circle Collider 2D
      • Polygon Collider 2D
  • Mesh Collider同士は衝突しない
    • Mesh ColliderのConvexにチェックを入れると衝突する

Collider + Rigidbodyの組み合わせ

Static Collider

  • Colliderのみ持ち、Rigidbodyは持たないゲームオブジェクト
  • 常に同じ場所に留まり、動き回ることのないオブジェクトに対して使用する
  • ゲームプレイ中に移動、スケーリング等行うと、物理エンジンのパフォーマンスが著しく低下する

Rigidbody Collider

  • ColliderとisKinematicにチェックが入っていないRigidbodyを持ったゲームオブジェクト
  • 物理エンジンによってシミュレートされ、スクリプトから適用される衝突や力に反応する

Kinematic Rigidbody Collider

  • ColliderとisKinematicにチェックがあるRigidbodyを持つゲームオブジェクト
  • Transformコンポーネントの変更により、スクリプトからオブジェクトを動かすことが可能
  • ただし、衝突や力を加えて動かす事はできない
  • isKinematicプロパティを切り替えることにより、Rigidbody Colliderとして動作させることも可能

衝突時のスクリプトアクション

  • 衝突が発生した際には、ゲームオブジェクトにアタッチされているスクリプトに対して、特定の関数を呼び出す
    • OnCollisionEnter : 衝突検知時に呼び出される
    • OnCollisionStay : 衝突検知中に呼び出される
    • OnCollisionExit : 衝突検知終了時に呼び出される
  • 衝突する2つのColliderに対して、どちらか一方はisKinematicがオフでなければならないと関数は呼び出されない

呼び出される組み合わせは以下になります。

  Static Collider Rigidbody Collider Kinematic Rigidbody Collider
Static Collider    
Rigidbody Collider
Kinematic Rigidbody Collider    

Trigger

  • ColliderのisTriggerプロパティをONにする
  • すると衝突が発生した際に、Collider同士はすり抜けるようになる
  • ColliderがTriggerの空間に侵入した際、Triggerはアタッチされているゲームオブジェクトのスクリプトに対して、特定の関数を呼び出す
    • OnTriggerEnter : 接触検知時に呼び出される
    • OnTriggerStay : 接触検知中に呼び出される
    • OnTriggerExit : 接触検知終了時に呼び出される

呼び出される組み合わせは以下になります。

  Static Collider Rigidbody Collider Kinematic Rigidbody Collider Static Trigger Collider Rigidbody Trigger Collider Kinematic Rigidbody Trigger Collider
Static Collider        
Rigidbody Collider      
Kinematic Rigidbody Collider      
Static Trigger Collider    
Rigidbody Trigger Collider
Kinematic Rigidbody Trigger Collider

参考サイト

Unity - マニュアル: Rigidbodies

Unity - マニュアル: コライダー