Quick Reference
Is Trigger를 끄면 실제 충돌과 OnCollision...을, 켜면 겹침 감지와 OnTrigger...를 사용합니다. OnTrigger...는 쌍 중 하나에 Rigidbody 또는 ArticulationBody가 있어야 하고, OnCollision... 이벤트는 쌍 중 하나에 non-kinematic Rigidbody가 있어야 전달됩니다. 2D에는 Collider2D·Rigidbody2D와 별도 OnCollision2D...·OnTrigger2D... 메시지를 사용합니다.
| 항목 | 내용 |
|---|---|
| 역할 | 물리 충돌과 Trigger 판정을 위한 모양 정보 |
| 언제 쓰는가 | 벽, 바닥, 아이템 획득 범위, 히트박스, 상호작용 범위를 만들 때 |
| 기준 버전 | Unity 6.5 (6000.5) |
| 핵심 Inspector | Is Trigger, Material, Center, 각 콜라이더의 Size/Radius/Height, Mesh Collider의 Convex |
| 자주 연결되는 API | bounds, ClosestPoint, Raycast, enabled, OnCollision..., OnTrigger... |
Inspector 설정
| 설정값 | 언제 바꾸는가 | 잘못 맞추면 생기는 문제 |
|---|---|---|
Is Trigger | 문 열기, 아이템 획득, 범위 감지일 때 | OnCollision을 기다리거나 실제로 막히지 않아야 할 곳이 막힘 |
Material | 미끄러움, 마찰, 반발을 조정할 때 | 이동 코드가 이상한 줄 알았는데 실제 원인은 물리 재질 |
Center | 메시 원점과 충돌 중심이 다를 때 | 시각 메시와 판정이 어긋나 맞는데 안 맞는 느낌이 생김 |
Size / Radius / Height | 실제 판정 범위를 맞출 때 | 히트박스가 과도하게 크거나 작아 체감이 달라짐 |
Direction (Capsule) | 세로/가로 캡슐 방향을 바꿔야 할 때 | 누운 오브젝트인데 세워진 판정으로 남음 |
Convex (Mesh Collider) | 움직이는 물체와 Mesh Collider를 같이 써야 할 때 | 비활성 상태로 남거나 Rigidbody와 제약이 충돌 |
공통값: Is Trigger, Material
Is Trigger를 끄면 물리 충돌, 켜면 겹침 이벤트 중심으로 동작합니다. 문 열기 범위, 아이템 수집 범위, 체크포인트는 Trigger가 자연스럽고, 실제로 막아야 하는 벽과 바닥은 일반 충돌이 맞습니다.
Physics Material은 미끄러움과 반발을 결정합니다. 얼음 바닥, 튀는 공, 마찰 없는 레일을 만들 때 바꾸지만, 이동감이 이상할 때 Rigidbody 코드보다 Material이 원인인 경우도 많습니다.
공통값: Center
Center는 GameObject 원점 기준으로 충돌 모양을 얼마나 옮길지 정합니다. 시각 메시 원점이 발밑인데 충돌체는 허리 중심이어야 하는 경우처럼, 메시와 충돌 모양이 꼭 같은 기준점을 가질 필요는 없습니다.
Center를 크게 옮긴 상태에서 부모 Scale이나 회전을 바꾸면, Scene view에서는 맞아 보여도 런타임 체감이 어긋날 수 있습니다.
Box, Sphere, Capsule, Mesh
Box Collider는 Size, Sphere는 Radius, Capsule은 Radius, Height, Direction이 핵심입니다. 캐릭터 몸통은 Capsule이, 간단한 프롭과 벽은 Box가, 동그란 트리거는 Sphere가 편합니다.
Mesh Collider는 메시 형태를 더 정확히 따르지만 가장 비싸고, 동적 Rigidbody와 함께 쓸 때는 Convex 제약을 먼저 확인해야 합니다. 정적 레벨 지형에는 유리하지만, 움직이는 복잡 메시에 무턱대고 붙이면 비용과 제약이 커집니다.
스크립트 연결
| 필드/프로퍼티 | 언제 읽거나 쓰는가 | 주의할 점 |
|---|---|---|
enabled | 일시적으로 판정만 끄고 싶을 때 | 시각 오브젝트는 남고 충돌만 사라짐 |
isTrigger | 충돌/겹침 모드를 런타임에 바꿀 때 | 이벤트 흐름이 함께 바뀜 |
bounds | 현재 월드 기준 판정 범위를 확인할 때 | 축 정렬 경계라 회전 모양과 완전히 같지는 않음 |
attachedRigidbody | 연결된 물리 본체가 필요한 경우 | Collider만 보고 Rigidbody가 없다고 착각하기 쉽다 |
| 메서드 | 언제 쓰는가 | 연결 지점 |
|---|---|---|
ClosestPoint() | 충돌 지점 근사, 거리 계산 | 근접 상호작용 판정 |
Raycast() | 특정 Collider만 상대로 레이 검사를 할 때 | 마우스 선택, 상호작용 |
OnCollisionEnter/Stay/Exit | 실제 충돌 응답이 필요할 때 | 물리 충돌 이벤트 |
OnTriggerEnter/Stay/Exit | 겹침 감지, 범위 진입/이탈 | Trigger 이벤트 |
Trigger와 충돌은 이벤트 함수가 다릅니다. "막는 충돌"인지 "겹침 감지"인지가 코드 진입점까지 바꿉니다.
Mesh Collider는 정적 레벨 지형에는 적합하지만 동적 Rigidbody에는 Convex가 필요하며, 복잡한 움직이는 형태는 여러 단순 Collider를 조합하는 편이 예측 가능하고 비용도 낮습니다. OnControllerColliderHit는 CharacterController 전용 메시지이므로 Rigidbody 충돌 콜백과 섞지 않습니다.
using UnityEngine;
public class PickupZone : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
if (!other.CompareTag("Player")) return;
Debug.Log("아이템 획득 범위 진입");
}
}OnCollisionEnter는 실제 충돌 응답, OnTriggerEnter는 겹침 감지입니다. 런타임 판정 범위를 코드에서 확인할 때는 bounds와 ClosestPoint가 자주 쓰입니다.
자주 틀리는 부분
- Trigger인데
OnCollisionEnter를 기다리거나, 반대로 일반 Collider인데OnTriggerEnter를 기다리는 실수가 많습니다. - 움직이는 복잡 메시에서 Mesh Collider를 그대로 쓰면 성능과
Convex제한이 문제됩니다. - 비균일 Scale 부모 아래 Collider는 보이는 메시와 체감 충돌이 달라질 수 있습니다.
- Rigidbody 없이 Trigger 이벤트가 안 오는 경우는 상대 오브젝트의 Rigidbody 존재 여부까지 같이 봐야 합니다.
관련 컴포넌트
Rigidbody, Transform, Unity 충돌과 Trigger 구분, Unity Raycast 기본, Physics LayerMask와 Collision Matrix
참고 링크
3 sources