| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- event bus
- 기술면접
- Dependency Injection
- New Input System
- 게임 디자인 패턴
- MVP 패턴
- 오브젝트 풀
- Canvas Scaler
- 유니티
- Abstract Factory Pattern
- unity
- 데이터 형식
- Visual Studio Installer
- 추상 팩토리 패턴
- 이벤트 버스
- 개발
- 프로젝트 생성
- 구글플레이콘솔
- 의존성 주입
- Render Mode
- 구글 스프레드 시트
- 스타일 지침
- Di
- Object Pool
- 상태 패턴
- 테이블 데이터
- github desktop
- 콘솔 앱
- Unity 기술면접
- C#
- Today
- Total
DevDino
[Unity 기술면접] OnCollision vs OnTrigger 본문
"OnCollisionEnter와 OnTriggerEnter 이벤트가 각각 어떤 조건에서 발생하나요?"
OnCollision vs OnTrigger
OnCollision (물리적 충돌)
물리적인 반발력, 튕김, 속도 변화 등의 물리 연산이 동반되는 충돌입니다.
발생 조건
- 두 객체 모두 Collider의 IsTrigger가 비활성화(false)되어 있어야 합니다.
- 최소 한 객체는 isKinematic이 false인 Rigidbody를 가져야 정상적인 물리 충돌이 발생합니다.
이벤트 함수
- OnCollisionEnter(Collision collision): 두 Collider가 부딪히는 첫 시점에 1회 호출.
- OnCollisionStay(Collision collision): 충돌이 지속되는 동안 매 프레임 호출(Rigidbody가 Sleep 상태에 빠지면 호출이 멈출 수 있음).
- OnCollisionExit(Collision collision): 충돌이 끝나고 떨어질 때 1회 호출.
매개변수로 Collision 객체를 받으며, 여기에는 접촉한 상대의 정보뿐만 아니라 접촉 지점, 충돌 속도 등 상세한 물리 정보가 담겨 있습니다.
OnTrigger (영역 판정)
물리적인 충돌(반발력 등) 없이 서로 통과하며, 특정 영역에 진입/탈출했는지만을 판정합니다.
발생 조건
- 두 객체 중 최소 하나의 Collider에 IsTrigger가 활성화(true) 되어 있어야 합니다.
이벤트 함수
- OnTriggerEnter(Collider other): 어떤 Collider가 Trigger 영역에 처음 들어왔을 때 1회 호출.
- OnTriggerStay(Collider other): 영역 안에 머무는 동안 매 프레임 호출.
- OnTriggerExit(Collider other): 영역에서 빠져나갈 때 1회 호출.
매개변수로 Collider 자체를 받습니다. 충돌 지점 같은 물리 정보는 없으며, '누가 영역에 들어오고 나갔는지' 식별하는 데 집중합니다.
주의사항
isKinematic의 활용
Rigidbody의 isKinematic = true로 설정하면 물리 엔진의 힘(중력 등)은 무시되지만, Transform으로 직접 이동시키면서 OnTrigger 이벤트는 정상적으로 발생시킬 수 있습니다. 하지만 두 객체 모두 Kinematic이라면 OnCollision 이벤트는 발생하지 않습니다.
빠른 물체의 통과(터널링)
물체가 너무 빠르면 Update 주기 사이에 얇은 Collider를 통과해버려 이벤트가 누락될 수 있습니다. 이때는 Rigidbody의 Collision Detection 모드를 Continuous로 변경하여 해결합니다.
2D vs 3D
2D 프로젝트에서는 반드시 Collider2D, Rigidbody2D, OnCollisionEnter2D 등을 사용해야 하며, 2D와 3D 물리 엔진은 서로 상호작용하지 않습니다.
최적화 구조
부모-자식 구조로 복합적인 Collider를 구성할 때, Rigidbody는 최상단(Root) 오브젝트에 하나만 부착하는 것이 성능 및 물리 연산 안정성에 좋습니다.
참고
Unity - Rigidbody.OnCollisionEnter(Collision)
Unity - Collider.OnTriggerEnter(Collider)
'Unity > 기술면접' 카테고리의 다른 글
| [Unity 기술면접] C# 델리게이트(Delegate)와 이벤트(Event)의 차이점 (0) | 2026.01.15 |
|---|---|
| [Unity 기술면접] Unity Input System (0) | 2026.01.14 |
| [Unity 기술면접] Unity Collider vs Rigidbody (1) | 2026.01.09 |
| [Unity 기술면접] Unity Quaternion과 Gimbal Lock (0) | 2026.01.07 |
| [Unity 기술면접] Dictionary vs Hashtable (0) | 2026.01.06 |