흔한 덕후의 잡동사니

Collider 컴포넌트의 Trigger 옵션에 대하여 본문

GameEngine/Unity

Collider 컴포넌트의 Trigger 옵션에 대하여

chinodaiski 2025. 2. 10. 20:42

1. Trigger란?

Trigger는 Collider 컴포넌트의 속성 중 하나로, Is Trigger 옵션을 활성화하면 해당 Collider는 물리적인 충돌을 일으키지 않는다. 대신, 다른 Collider와 겹치는지 여부만 감지한다. Trigger로 설정된 Collider는 물리 엔진에 의해 이동하거나 밀려나지 않는다. 이 기능은 주로 물리적 충돌이 필요 없는 상황에서 오브젝트 간의 상호작용을 감지할 때 유용하다. 주로 게임 내에서 특정 영역에 진입하거나 아이템을 획득하는 등의 이벤트를 구현할 때 사용된다.

 

2. Trigger 사용 방법

Trigger의 사용 방법은 3단계로 나누어 볼 수 있다.

 

1. Collider 추가

Trigger로 사용할 오브젝트에 Collider 컴포넌트를 추가한다. Collider의 종류는 Box, Sphere, Capsule 등 다양하게 선택할 수 있다.

2. Trigger 활성화

Collider 컴포넌트의 Is Trigger 옵션을 체크하여 활성화한다. 이는 Unity 에디터의 Inspector 창에서 간단히 설정할 수 있다.

3. 이벤트 구현

Trigger와 관련된 이벤트(OnTriggerEnter, OnTriggerStay, OnTriggerExit)를 스크립트에서 구현하여 원하는 동작을 정의한다.
Trigger 이벤트는 다른 Collider가 Trigger 영역에 진입하거나 머무르거나 벗어날 때 호출된다. 이를 통해 게임 내에서 다양한 상호작용을 구현할 수 있다.

 

3. Trigger 사용 예시

3.1. 아이템 획득
플레이어가 특정 아이템에 접근하면 아이템을 획득하는 기능을 구현할 수 있다. 아이템 오브젝트에 Trigger를 설정하고, 플레이어가 아이템과 겹칠 때 OnTriggerEnter 이벤트를 사용하여 아이템을 획득하도록 처리한다. 아이템을 획득한 후에는 해당 오브젝트를 비활성화하거나 삭제할 수 있다.

3.2. 위험 지역 경고
플레이어가 위험 지역(예: 용암 지대, 적의 감시 범위)에 진입하면 경고 메시지를 표시하는 기능을 구현할 수 있다. 위험 지역에 Trigger를 설정하고, 플레이어가 해당 영역에 진입하면 OnTriggerEnter 이벤트를 통해 경고 메시지를 출력한다. 추가로, 플레이어가 영역 내에 머무를 때 OnTriggerStay를 사용하여 지속적인 데미지를 주는 로직을 추가할 수도 있다.

3.3. 포탈 또는 다음 스테이지 이동
플레이어가 특정 영역(예: 포탈)에 진입하면 다음 스테이지로 이동하는 기능을 구현할 수 있다. 포탈 오브젝트에 Trigger를 설정하고, 플레이어가 포탈과 겹치면 OnTriggerEnter 이벤트를 통해 씬을 전환하거나 플레이어의 위치를 이동시킨다.

 

4. Trigger 사용 시 주의사항

4.1. RigidBody 필요

Trigger 이벤트를 감지하려면 적어도 하나의 오브젝트에 RigidBody 컴포넌트가 붙어 있어야 한다. RigidBody가 없는 오브젝트는 Trigger 이벤트를 발생시키지 않는다. 또한 RigidBody의 옵션에 따라 발생 여부가 결정되니 Collision API 공식 문서의 내용을 참고하자.

Trigger 이벤트가 발생하는 조건

 

+ 추가로 Kinematic은 RigidBody 컴포넌트의 설정 중 하나로, 이 옵션이 활성화되면 해당 오브젝트는 물리 엔진의 힘(중력, 충돌, 외부 힘 등)에 영향을 받지 않는다. Collider의 Trigger, RigidBody의 Kinematic 옵션의 관계를 이해하여 물리 연산을 최적화 해야한다. 이벤트 발생요건에 대해선 위의 이미지를 참고하자.

 

4.2 물리적 충돌 없음

Trigger는 물리적인 충돌을 발생시키지 않으므로, 오브젝트가 서로 통과할 수 있다. 물리적 반응이 필요한 경우에는 Trigger 대신 일반 Collider를 사용해야 한다.

4.3 성능 고려

OnTriggerStay 이벤트는 매 프레임마다 호출되므로, 불필요한 연산을 최소화하여 성능 저하를 방지해야 한다.

 

5. Trigger와 Collision의 차이

Trigger와 Collision은 모두 Collider를 기반으로 동작하지만, 그 목적과 동작 방식에서 차이가 있다.

Trigger - 물리적 충돌 없이 겹침만 감지한다. OnTriggerEnter, OnTriggerStay, OnTriggerExit 이벤트를 사용한다.
Collision - 물리적 충돌을 발생시킨다. OnCollisionEnter, OnCollisionStay, OnCollisionExit 이벤트를 사용한다.

 

가장 중요한 것은 Trigger는 물리 연산이 일어나지 않는다는 것이다. 그러니 RigidBody를 사용하더라도 물리연산이 필요없다면 무조건 Trigger 옵션을 키는게 좋다.

 

6. 결론

Trigger를 사용하면 Unity에서 물리적 충돌 없이 오브젝트 간의 상호작용을 감지할 수 있다. 다만, RigidBody의 필요성과 성능 문제를 고려하여 적절히 사용하는 것이 중요하다.

 

 

참조 - Unity Collision API