핵심 정리
| 항목 | 내용 |
|---|---|
| 역할 | 물리 충돌과 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와 충돌은 이벤트 함수가 다릅니다. "막는 충돌"인지 "겹침 감지"인지가 코드 진입점까지 바꿉니다.
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