-
Collision 과 Trigger 의 간단 설명Unity 2023. 3. 25. 18:42
게임을 구현할 때 대부분 사용하게 되는 물리적인 충돌을 감지하고 처리하는 기능 혹은 메서드이다.
(예를 들면 아이템 먹기, 부딪히기, 통과하기, 점프하기, 총 쏘기 등 . . . )
Collider 의 사전적인 의미를 찾아보면 두 충돌체를 충돌 처리 해주는 오브젝트(가속기)를 뜻하는 단어라고 나온다.
유니티에서 콜라이더의 정의는 물리 충돌 처리를 위한 오브젝트의 형태라고 표기되어 있다.
Trigger 의 사전적 의미 또한 다른 회로에 적당한 계기를 주어 필요한 동작을 일으키는 것이라고 한다.
유니티에서 트리거를 보면 콜라이더 안에 포함되어 있는 이벤트 중 하나라고 정의되어 있다.
Collision 과 Trigger 의 공통점은 바로 충돌 기능을 구현한다는 것이다.
그리고 이 기능을 사용하기 위해서는 물리적인 힘의 컴포넌트인 Rigidbody 기능이 필요하다.
충돌을 감지하기 위해서다.
그렇기 때문에 Rigidbody 컴포넌트를 추가하지 않으면 기능 사용이 불가하다.
Collision 는 충돌했을 때 이를 감지하고 충돌 이벤트가 일어난 뒤에 함수가 호출된다.
충돌 이벤트가 일어나야 하기 때문에 Collision의 기능 is Trigger이 비활성화 상태여야 한다.
자주 쓰이는 함수를 알아보겠다.
OnCollisionEnter (Collision target)
→ target이 충돌체와 충돌했을 때 호출되는 함수
OnCollisionExit (Collision target)
→ target이 충돌체와 충돌을 끝마쳤을 때 호출되는 함수
OnCollisionStay (Collision target)
→ target이 충돌체와 충돌하는 동안 호출되는 함수
Collider 는 정적(static) 콜라이더와 동적 콜라이더가 있다.
정적 콜라이더는 보통 벽이나 땅 등 고정된 요소를 만들기 위해 사용된다.
이 고정된 요소는 다른 물리적인 요소가 필요 없기 때문에 Rigidbody 기능을 사용하지 않아도 된다.
하지만 Transform.position이(위치가) 고정된 상태여야 한다. 물리적인 엔진 이유 때문이다.
반대로 Rigidbody 기능이 들어간 콜라이더는 모두 동적 콜라이더라고 부른다.
동적 콜라이더와 정적 콜라이더는 상호작용이 가능하지만 정적 콜라이더에는 물리적인 힘이 없기 때문에
충돌이나 힘에 반응하지는 않는다.
Trigger 는 충돌했을 때 물리적인 충돌 이벤트가 일어나지는 않지만 함수는 호출된다.
물리적인 충돌이 없기 때문에
Collider 기능의 is Trigger가 활성화 되어야만 이 메서드를 사용할 수 있다.
(콜라이더 메서드는 반대로 is Trigger가 비활성화 되어야 사용 가능했다.)
그리고 보는 것처럼 Trigger 함수는 Collision 보다 더 빨리 호출된다.
콜라이더에 반해 충돌 이벤트가 주어지지 않기 때문이라고 생각되는데,
이건 내가 더 알아본 뒤 내용을 추가하거나 해야 할 것 같다....
자주 쓰이는 함수를 알아보겠다.
OnTriggerEnter (Collision other)
→ 두 충돌체가 충돌했을 때 호출되는 함수
OnTriggerExit (Collision other)
→ 두 충돌체가 충돌을 끝마쳤을 때 호출되는 함수
OnTriggerStay (Collision other)
→ 두 충돌체가 충돌하는 동안 호출되는 함수
콜라이더와 트리거에 관한 더 자세한 설명은 유니티 공식 사이트에서 확인하면 된다.
https://docs.unity3d.com/kr/2018.4/Manual/CollidersOverview.html
콜라이더 - Unity 매뉴얼
콜라이더(Collider) 컴포넌트는 물리 충돌 처리를 위한 오브젝트의 형태를 정의합니다. 콜라이더는 보이지 않는 요소이므로 오브젝트의 메시와 정확히 동일한 모양일 필요는 없으며, 실제로는 게
docs.unity3d.com
'Unity' 카테고리의 다른 글
애니메이션 간단 비교 (0) 2023.03.28 Physics.Raycast 함수 (0) 2023.03.28 마우스 커서(Cursor) 숨기기 (0) 2023.03.24 InvokeRepeating 함수 (0) 2023.03.24 Mathf.Sqrt( ) 함수 (0) 2023.03.23