Unity/Scripts

Unity 3D C# OnTriggerEnter, OnTriggerStay, OnTriggerExit

공훈이 2023. 6. 28. 22:00
반응형

Ontrigger 메서드는 Unity C# MonoBehaviour 메서드 중 하나로 주로 물리적인 상호작용과 관련된 작업을 처리하여 이벤트를 발생시킬 수 있는 콜백 함수입니다. 

 

준비

Collider 컴포넌트 (충돌될 오브젝트 둘중 하나만 isTrigger 체크는 한쪽만 켜져 있어도 가능합니다.)

RigidBody 컴포넌트 : 물리처리를 하기위한 필수 컴포넌트

 

OnTriggerEnter

설명

오브젝트끼리 첫 충돌을 감지 했을때 한번 작동됩니다. 

TIP )

이후에 작동시키기 위해서는 OntriggerExit 메서드가 호출되고 나서 재충돌 시 작동됩니다. 

 

사용법

private void OnTriggerEnter(Collider other) 
{

     if(other.CompareTag("A"))
     {
           // "A" 라는 태그를 가진 오브젝트가 첫 충돌시 이벤트 작동 
     }

}

 

OnTriggerStay

설명 

오브젝트끼리 첫 충돌을 감지하고 나서 충돌이 지속된다면 Frame 단위로 계속 작동됩니다. 

단, OntriggerEnter에서 같은 이벤트를 처리했을 시 OnTriggerStay에서는 같은 이벤트 처리를 중복해서 실행시킬 필요 없습니다.

 

주의 )

OntriggerStay 메서드는 마냥 무한정 호출되지 않고, 충돌된 오브젝트에 변경된 내용이 없다면 어느 순간 호출을 멈춘다. 

사용법

private void OnTriggerStay(Collider other) 
{

     if(other.CompareTag("A"))
     {
           // "A" 라는 태그를 가진 오브젝트가 첫 충돌이후 충돌이 지속되는 경우 이벤트 작동 
     }

}

 

TIP )

Tag 문자열을 비교해서 조건을 체크할 때는 CompareTag()를 사용하자! 

다른 비교문은 (other.tag == "A" //) 호출될때마다 가비지 컬렉터가 쌓이게 되어 부하를 줄 수 있다. 

 

OnTriggerExit

설명

오브젝트끼리 충돌을 하고 해제되는 순간에 한번 작동됩니다. 

 

TIP )

충돌해제된 오브젝트를 체크하고싶을때에는 OntriggerEnter에서 사용한 조건문과 동일하게 조건을 걸어 충돌해제되었는지 체크합니다.  

사용법

private void OnTriggerExit(Collider other) 
{

     if(other.CompareTag("A"))
     {
           // "A" 라는 태그를 가진 오브젝트가 충돌해제 된 경우 이벤트 작동
     }

}

 

반응형