본문 바로가기

Unity/System

[펌]물리 충돌 제대로 사용하자


Collider

 Collider만 붙어있는 오브젝트는 물리 엔진에서 Static Collider로 따로 관리된다. 이동을 막는 벽의 역할을 수행할 때 적합하며 transform을 직접 움직일 경우 부하가 생기므로 움직이지 않는 경우에만 사용한다. 벽이 아닌 감지 기능으로 사용할 경우에는 IsTrigger 옵션을 켠다. 이 옵션을 켜면 물리 충돌은 일어나지 않고 충돌 감지만 된다.


Collider & RigidBody

  Collider와 Rigidbody가 붙어있는 오브젝트는 Collider만 붙어있는 오브젝트와 달리 물리적인 힘으로 움직일 때 사용한다. 움직이는 벽이라면 IsTrigger를 끄고, 움직이는 감지 물체라면 IsTrigger 옵션을 켠다. Collider가 붙어 있으므로 transform으로 움직이면 안되고 오직 물리적인 힘으로 움직여야 한다. 하지만 Rigidbody의 IsKinematic 옵션을 켜면 물리 엔진을 사용하지 않고 transform 변경으로 움직일 수 있다.


결론

움직이지 않는 벽 : Collider

움직이지 않는 감지 물체 : Collider(IsTrigger)

물리로 움직이는 벽 : Collider & Rigidbody

물리로 움직이는 감지 물체 : Collider(IsTrigger) & Rigidbody

transform으로 움직이는 벽 : Collider & Rigidbody(IsKinematic)

transform으로 움직이는 감지 물체 : Collider(IsTrigger) & Rigidbody(IsKinematic)

물리 이동만 한다면 : Rigidbody

transform 이동만 한다면 : Rigidbody(IsKinematic)


※ 충돌 이벤트 함수

  • 충돌 : void OnCollisionEnter(Collision) / void OnCollisionStay(Collision) / void OnCollisionExit(Collision)
  • 감지 : void OnTriggerEnter(Collider) / void OnTriggerStay(Collider) / void OnTriggerExit(Collider)


※ Collision action matrix


'Unity > System' 카테고리의 다른 글

Inventory 시스템 구현  (0) 2015.12.31