Unity - OnTrigger

김도현·2023년 9월 26일
0

TIL

목록 보기
41/76

1. OnTrigger이란?

충돌한 2개의 물체중 한개가 rigidbody를 갖고있고 충돌한 물체 모두가 collider를 갖고있며 2개중 하나가 isTrigger = true일 때 사용할 수 있다.

2. 종류

종류설명
OnTriggerEnter두 물체가 부딪친 순간 호출
OnTriggerStay물체가 충돌 중인 경우 계속 호출
OnTriggerExit물체가 떨어진 순간 호출

3. 호출 순서

FixedUpdate() -> OnTriggerXX()¹ -> OnCollisionXX() -> Update()

OnTriggerXX()안에서의 순서

충돌 중일 때
1 프레임
~~
OnTriggerEnter 실행
OnTriggerStay 실행
Update()
~~

2 프레임
~~
OnTriggerStay 실행
Update()
~~

4. OnTriggerStay()의 문제점

1. 성능

OnTriggerStay()안에서 문자열로 비교할 경우 가비지 컬렉터가 쌓여서 성능저하가 발생할 수 있다.
이를 해결하기 위해서는 Tag로 비교해야 하지만 이래도 Enter나 Exit에 비해 CG가 많이 쌓인다.
(호출하는 양이 많으니 어쩔수 없다.)

2. 움직임 감지 문제

OnTriggerStay()안에서 일정시간 이후 Rigidbody의 변화를 줄려고 하면 문제가 발생할 수 있다. 왜냐하면 Rigidbody는 오브젝트의 변화가 일정 시간 동안 없을 경우, 슬리핑(Sleeping) 모드로 돌입한다. (최적화 하기 때문이다.)

이러한 문제를 해결할려면 슬리핑 모드를 Never Sleep로 변경하면 해결이 가능하다.

0개의 댓글