1. 물리 시뮬레이션의 핵심: Rigidbody
Rigidbody는 게임 오브젝트에 물리 엔진을 적용하여 질량, 중력, 마찰력 등을 계산하는 컴포넌트입니다.
🛠️ 주요 속성 (Property)
| 속성 | 설명 | 참고 |
| Mass | 질량. F=ma 계산 시 힘의 효율을 결정 | 기본값 1 |
| Drag | 선형 감속 (공기 저항 효과) | 0이면 감속 없음 |
| Angular Drag | 회전 감속 |
0이면 회전 감속 없음
|
| Use Gravity | 중력 적용 여부 |
체크 시 유니티 기본 중력(−9.81m/s2) 적용
|
| Is Kinematic | 물리 엔진의 영향을 받지 않고 스크립트로 제어 | 충돌 감지만 가능 |
| Interpolate | 프레임 간 이동 보간 |
시각적인 부드러움 제공
|
| Collision Detection | 충돌 검출 방식 |
Discrete / Continuous 등
|
| Constraints | 특정 축의 이동 및 회전 고정 |
Freeze Position / Rotation
|
💻 주요 메서드 및 프로퍼티
- AddForce(Vector3 force): 특정 방향으로 물리적인 힘을 가합니다. (누적 가능)
- AddTorque(Vector3 torque): 물체에 회전력을 더합니다.
- velocity: 현재 오브젝트의 속도(물리력)입니다.
- angularVelocity: 현재 오브젝트의 회전 속도입니다.

2. 충돌 영역 정의: Collider
오브젝트의 형체를 정의하고 충돌을 감지하는 컴포넌트입니다.
- 일반 Collider: 물리적인 벽 역할을 하여 서로 통과하지 못하게 합니다.
- Is Trigger (체크 시): 물리적인 밀려남은 없지만, 영역 진입 여부만 감지합니다. (예: 포탈, 아이템 습득 영역)

3. 충돌 이벤트와 콜백 (Callback)
충돌 상황에 따라 유니티가 자동으로 호출해주는 함수들입니다.
💥 Collision vs Trigger 비교
| 구분 | Collision (일반 충돌) | Trigger (트리거) |
| IsTrigger 옵션 | 체크 해제 (False) | 체크 필수 (True) |
| 물리 반응 | 튕겨나감, 부딪힘 발생 |
물리 반응 없음 (통과함)
|
| 필수 조건 | 양쪽 모두 Collider + 최소 한쪽 Rigidbody |
최소 한쪽 Rigidbody 포함
|
| 매개변수 타입 | Collision (상대 정보, 힘, 접점 포함) |
Collider (상대 컴포넌트 정보만 포함)
|
📝 대표 이벤트 코드
// 일반 충돌 (Collision)
void OnCollisionEnter(Collision collision) { /* 충돌 시작 */ }
void OnCollisionStay(Collision collision) { /* 충돌 중 (지양) */ }
void OnCollisionExit(Collision collision) { /* 충돌 종료 */ }
// 트리거 충돌 (Trigger)
void OnTriggerEnter(Collider other) { /* 진입 */ }
void OnTriggerStay(Collider other) { /* 영역 안 (지양) */ }
void OnTriggerExit(Collider other) { /* 탈출 */ }
💡 Tip: Stay 함수는 충돌 중 매 프레임 호출되어 성능에 부담을 줍니다. 가급적 Enter와 Exit만 사용하는 것이 최적화에 유리합니다.
4. 2D 물리 (Physics 2D)
3D와 원리는 동일하며, 컴포넌트 이름과 메서드 뒤에 **'2D'**만 붙여주면 됩니다.
- 컴포넌트: Rigidbody2D, BoxCollider2D 등
- 이벤트: OnCollisionEnter2D, OnTriggerEnter2D 등
5. 문제 해결 및 최적화 (Troubleshooting)
- 충돌 이벤트가 발생하지 않을 때: 최소 한쪽 오브젝트에 Rigidbody가 있는지 확인하세요.
- 충돌이 안 일어날 때 체크리스트 (Troubleshooting)
- 가장 많이 실수하는 부분들이 이미지에 잘 정리되어 있습니다.
문제 상황 원인 해결 방법 충돌 이벤트 미발생 Rigidbody가 없는 Collider끼리 충돌 최소 한쪽에 Rigidbody 추가물리 반응 없음 Rigidbody가 IsKinematic = true 상태 물리 반응 필요 시 IsKinematic 해제이벤트 종류 불일치 Collider의 IsTrigger 옵션 여부 Trigger 체크 시 OnTriggerXXX 사용
일반 Collider는 OnCollisionXXX 사용
- 물리 연산의 타이밍: Update()가 아닌 FixedUpdate()에서 물리 관련 연산을 수행해야 안정적입니다.
- Layer & Tag 활용:
- Tag: 특정 오브젝트를 식별할 때 유용합니다.
- Layer: Collision Matrix를 통해 특정 레이어끼리만 충돌하게 설정하여 연산량을 획기적으로 줄일 수 있습니다.

🌟 이해 및 마무리
물리와 충돌은 게임의 상호작용을 만드는 가장 기초이자 핵심입니다. 하지만 연산량이 많으므로 불필요한 Rigidbody 사용을 자제하고, 단순한 형태의 Collider(Box, Sphere)를 사용하는 등의 최적화 습관이 중요합니다.
'유니티 > UnityEngine3D 입문 및 스크립팅 기초' 카테고리의 다른 글
| 코루틴 (0) | 2026.01.02 |
|---|---|
| Transform 및 위치 이동 (0) | 2026.01.01 |
| 오브젝트, 프리팹, 생성과 파괴 (0) | 2026.01.01 |
| 유니티 개요 (0) | 2026.01.01 |