20231218_OnTrigger,OnCollision

2023. 12. 19. 02:04IT/TIL

오늘의 TIL은 OnTrigger, OnCollision에 대한 내용이다.

 

유니티에서 충돌체크를 하기 위한 컴포넌트로 Collider를 사용하는데,

3D 오브젝트를 생성하는 경우에는 Collider가 자동적으로 추가되어 있다.

 

이 Collider를 이용하여 두 오브젝트 간의 충돌을 체크하는 방법이 있는데,

우선 OnTrigger에 대해서 살펴보면,

1. OnTriggerEnter(Collider other) - Trigger에 들어갔을 때(접촉했을 때)

2. OnTriggerStay(Collider other) - Trigger 안에 있을 때(포함되어 있을 때)

3. OnTriggerExit(Collider other) - Trigger를 벗어날 때(떨어질 때)

의 세 가지 상태로 나눌 수 있다.

 

1. OnTriggerEnter

OnTriggerEnter는 가장 널리 쓰이고 잘 알려진 OnTrigger로 이에 대한 공부를 하기 전까지는

이 OnTriggerEnter만 존재하는 것으로 알고 있었다.

특정 오브젝트와 접촉하는 순간에 발동하는 함수로,

팩맨에서 팩맨이 쿠키를 만나는 순간, 쿠키와 OnTriggerEnter가 되면서 쿠키가 사라지게 할 수 있다.

 

2. OnTriggerStay

OnTriggerStay는 특정 오브젝트 안에 있을 때 발동하는 함수로,

내가 물 속에 있을 때, 특정한 행동을 할 수 있게 만들어주는 함수이다.

 

3. OnTriggerExit

OnTriggerExit는 특정 오브젝트와의 접촉이 끝나는 순간 발동하는 함수로,

그 오브젝트 속에 있다가 나가는 순간(물 속에서 벗어나는 순간) 발동하는 함수를 만들 수 있다.

 

 

OnCollision의 경우에도 위와 같이

OnCollisionEnter, OnCollisionStay, OnCollisionExit가 있는데,

OnTrigger와 기능적으로는 같으나 OnTrigger의 경우에는 오브젝트 간의 충돌이 일어나지 않는 특징이 있는데,

 

실제로 유니티에서 3D 프로젝트를 생성한 뒤에

Collider에 있는 Is Trigger 항목을 체크하고 체크하지 않고 하면서 차이를 확인할 수 있다.

만약 해당 오브젝트에 rotation, position을 freeze한 상태라면,

Is Trigger가 체크되어 있다면 오브젝트를 통과하고 지나가지만,

Is Trigger가 체크되어 있지 않다면 오브젝트와 충돌하여 통과하지 못한다.

이 두 차이점이 OnTrigger와 OnCollsion의 차이점이다.

다시 말해서, OnTrigger는 충돌 시에 한 쪽을 (Is Trigger가 체크된 쪽) 충돌이 무시되는 오브젝트로 처리함으로써

두 물체간의 접촉은 확인하지만, 충돌을 처리하는 물리 처리가 빠진 함수라고 할 수 있다.

따라서 물리 연산이 작동되지 않기 때문에 Collision과 비교하여 비교적 가볍고 효율적인 함수라고 할 수 있다.

단, 두 물체간의 충돌 등 물리처리를 해야되는 경우에는 Collision을 사용하여야 된다.

'IT > TIL' 카테고리의 다른 글

20231220_AudioSource  (1) 2023.12.21
20231219_CherryPickCommit  (0) 2023.12.21
20231215_데이터 저장  (0) 2023.12.16
20231214_프리펩,ItemSlot  (0) 2023.12.14
20231213_Class  (0) 2023.12.14