빠른 비교
csharp
controller.Move(moveDirection * moveSpeed * Time.deltaTime);갈리는 기준
CharacterController는 "플레이어를 게임 규칙대로 직접 제어"하는 쪽에 가깝고,Rigidbody는 "물리 엔진 안의 물체로 참여"하는 쪽에 가깝습니다.- 점프, 미끄러짐, 충돌 반응, 밀침, 반동을 얼마나 물리 엔진에 맡길지에 따라 선택이 갈립니다.
- 정교한 캐릭터 조작, 계단 오르기, 벽 충돌 처리, 카메라 일체형 이동처럼 "게임 느낌"이 우선이면
CharacterController가 다루기 쉬운 경우가 많습니다. - 상자 밀기, 폭발 반동, 차량, 공, 물리 퍼즐처럼 외력과 충돌 반응이 핵심이면
Rigidbody쪽이 자연스럽습니다. - 둘을 섞어 억지로 한 캐릭터에 동시에 핵심 이동 수단으로 쓰면 제어권이 충돌하기 쉽습니다. 처음부터 주 이동 모델을 하나 정하는 편이 좋습니다.
선택 기준
| 상황 | 더 적합한 선택 |
|---|---|
| 플레이어 조작감 우선 | CharacterController |
| 물리 반응 우선 | Rigidbody |
| 외력과 충돌이 핵심 | Rigidbody |
| 계단/슬로프/접지 제어가 중요 | CharacterController |
| 혼합 사용 | 가능하지만 주 제어 모델은 하나로 두는 편이 안전 |
주의할 점
CharacterController와 Rigidbody를 같은 오브젝트의 주 이동 수단으로 동시에 쓰면 제어권이 충돌합니다.
csharp
// ❌ 같은 캐릭터에 CC + Rigidbody 동시 사용 — 충돌 처리가 두 곳에서 경쟁
controller.Move(moveDir * speed * Time.deltaTime);
rigidbody.AddForce(moveDir * force); // 제어권 충돌
// ✅ 주 이동 모델은 하나로 결정
// 조작감 우선: CharacterController만 사용
controller.Move(velocity * Time.deltaTime);
// 물리 반응 우선: Rigidbody만 사용
rigidbody.MovePosition(rigidbody.position + moveDir * speed * Time.fixedDeltaTime);참고 링크
2 sources