04
28

Collider

오브젝트 주위에 물리적 경계와 모양을 정의하여
충돌 감지와 물리 시뮬레이션을 할 수 있게 해주는 클래스이다.


물리 기반 게임에서 객체 간 실제적인 상호작용을 가능하게 한다.

모든 콜라이더들의 base class이다.

Rigidbody 컴포넌트와 함께 부착된 상태에서 오브젝트가 움직일 때
오브젝트의 Rigidbody 컴포넌트 내 kinematic을 체크하여 다른 오브젝트와의 물리적 충돌을 막을 수 있다. (kinematic을 체크하면 물리적인 힘에 반응하지 않고 애니메이션이 작동하며,
이동 코드를 구현할 때 Transform에 따라 움직이도록 하면 된다.)

영역이라고 이해하면 된다.

제일 연산 비용이 싼 콜라이더는 SphereCollider 이다.

OnCollisionEnter, OnCollisionExit, OnCollsionStay

Collider를 통해 충돌한 정보(충돌한 오브젝트의 Transform, Collider, Gameobject, Rigidbody 등이 담겨있다.)는 Collision 매개변수에 담겨있다.
Collision 내 프로퍼티
부딪치는 오브젝트나 부딪침을 당하는 오브젝트 둘 중 하나는 꼭 Rigidbody 컴포넌트를 가지고 있어야 발동한다. (이때 Rigidbody 컴포넌트 내 isKinematic은 False값으로 되어 있어야 한다.
isKinematic 값이 true인 오브젝트는 내부 물리연산을 하지 않기 때문에
오브젝트끼리 충돌하더라도 물리 연산 없이 뚫고 지나간다.)
부딪치는 오브젝트나 부딪침을 당하는 오브젝트 모두 Collider 컴포넌트를 가지고 있어야 발동한다.
(이때 Collider 컴포넌트 내 IsTrigger는 False값으로 되어 있어야 한다.
즉 trigger가 켜져있을 때는 두 오브젝트 사이에 물리적인 계산이 이루어지지 않는다.)
이벤트로 오브젝트가 바닥과 부딪치고 있는 상태인지를 점검하기 위한 용도로도 활용할 수 있겠다.

- 바닥과 OnCollisionStay 이벤트가 적용된 상태라면 isGround = true
- 바닥과 OnCollisionExit 이벤트가 적용된 상태라면 isGround = false

 

OnTriggerEnter, OnTriggerExit, OnTriggerStay

물리적인 충돌 없이 오브젝트의 Collider 범위 내에 들어오면
들어온 오브젝트에 대한 정보가 Collider 매개변수에 담겨있다.

보통은 isTrigger 체크를 움직이지 않을 정적 오브젝트에 체크해둔다.

Trigger를 사용하여 물리적인 연산을 하지 않게 하면 성능을 높일 수 있다.

통과하는 오브젝트나 통과를 당하는 오브젝트 둘 중 하나는 꼭 Rigidbody 컴포넌트를 가지고 있어야 발동한다.
(이때 Rigidbody 컴포넌트 내 IsKinematic 값은 무엇이든 상관없다.)

통과하는 오브젝트나 통과를 당하는 오브젝트 모두 Collider 컴포넌트를 가지고 있어야 발동한다.
(이때 두 오브젝트 중 하나는 Collider 컴포넌트 내 IsTrigger값이 True 이어야 한다.)

Kinematic

Kinematic 이란? (출처: Princeton 대학교)
: the branch of mechanics concerned with motion without reference to force or mass
즉, 외부의 힘이 영향을 미치지 않는 오브젝트가 kinematic의 성질을 가진 오브젝트라고 이해해야 한다.
사실, 모든 오브젝트가 물리학적인 외부 요인에 반응 해야 하는 것은 아니므로
kinematic을 설정하면 불필요한 시스템 부하도 줄일 수 있다.
Rigidbody의 힘, 중력, 속도 등의 영향을 받지 않는다.
그러니까 velocity 프로퍼티를 이용하여 캐릭터 움직임을 구현하려면 kinematic 값을 가지면 안된다.
(Translate 함수를 활용하거나 필요하다면,
캐릭터의 자식 오브젝트에 콜라이더 컴포넌트를 붙이고 isKinematic을 체크한다.)
스크립트에서 isKinematic 프로퍼티 값을 true로 설정하여 무언가에 부딪쳤을 때
붙어있는 것처럼 보이게 할 수도 있다.

Layer Collision Matrix

레이어 충돌 매트릭스는 유니티에서 어떤 레이어가 서로 충돌할 수 있는지를 지정하는 도구이다.
기본적으로 모든 레이어가 서로 충돌할 수 있지만,
매트릭스를 수정하여 충돌 가능한 레이어와 그렇지 않은 레이어를 변경할 수 있다.
유니티에서 레이어 충돌 매트릭스에 접근하려면,
Edit -> Project Settings -> Physics로 이동하면 모든 레이어가 표시되는 그리드가 나타난다.
이 그리드에서 각 레이어가 다른 레이어와 충돌할 수 있는지 표시하는 체크박스를 확인할 수 있다.
특정 레이어의 충돌 설정을 변경하려면 해당하는 상자를 체크하거나 체크 해제하면 된다.
예를 들어, "Player"와 "Enemy" 두 개의 레이어가 있고,
Player는 Enemy와 충돌할 수 있지만, Enemy끼리는 서로 충돌하지 않도록 설정하려면,
Layer Collision Matrix로 이동하여 "Enemy" 레이어의 행에서 "Enemy" 레이어를 나타내는 열의 상자를
선택 해제하면 된다.

  • 개인적으로 노션에 정리하였던 공부 내용 및 유니티 공식문서를 참고하여 작성하였습니다.

'유니티 개발 기술 > 물리 & 시뮬레이션' 카테고리의 다른 글

Raycast 살펴보기  (0) 2023.05.23
Joints  (0) 2023.05.06
AddTorque 함수, Physic Material  (0) 2023.05.05
AddForce 함수, OnMouse 함수  (1) 2023.05.02
Rigidbody 살펴보기  (0) 2023.04.30
COMMENT