캐릭터 이동을 구현하는 방법은 여러가지가 있겠지만 나는 크게 2가지로 나누어봤다.
Character Controller 컴포넌트를 사용하는 경우 | Rigidbody 컴포넌트를 사용하는 경우 | |
적용 대상 | ● FPS ● 3D 탐색형 게임 ● 플랫폼 게임 |
● 물리 기반 게임 ● 레이싱 게임 ● 스포츠 게임 |
핵심 특징 | - 이동을 Move() 메서드로 직접 제어 - 충돌 감지는 가능하지만 물리 반응 (튕기기 미끄러짐 등)X - 중력과 점프는 직접 코드로 구현 |
- AddForce()를 통해 물리 엔진을 활용하여 자연스러운 가속, 감속 구현 가능 - 중력, 마찰력, 충돌 반응을 자동으로 처리 |
장점 | ● 정확하고 예측 가능한 움직임 가능 - 이동이 Move() 메서드로 처리 되기 때문에 불안정한 물리 충돌 X - 정확한 경로로 이동해야 하는 게임에 적합 ● 부드러운 충돌감지 - Rigidbody처럼 중력이나 마찰력 계산 없이도 부드럽게 문, 바닥, 벽과 상호작용 O ● 성능 최적화에 유리 - 물리 연산 없이도 충돌 감지가 가능하여 CPU 부담 ↓ - 기본적으로 경사면 처리 기능이 있어 추가 코드 없이 기울어진 지형을 자연스럽게 이동 가능 |
● 물리 기반 충돌 및 반응 자동 처리 - 오브젝트가 실제 물리 법칙을 따르며 자연스럽게 움직이고 충돌함 ● 플레이어가 외부 힘에 의해 밀려나는 효과 적용 가능 - AddForce(), AddTorque() 같은 메서드로 자연스러운 힘을 가할 수 있어 폭발, 밀어내기, 충돌 등의 효과를 쉽게 구현 가능 |
단점 | ● 물리적인 반응 X - Rigidbody처럼 AddForce()를 사용할 수 없어 플레이어가 물리적으로 튕기거나 부딪히는 효과 구현이 힘듦 ● 중력과 점프를 직접 구현해야함 - 자체적인 중력 기능이 없기 때문에 Update()에서 직접 중력을 구현 해야함. (점프, 낙하 속도 조절 시 별도의 코드 필요) |
● 정확한 이동 구현 어려움 - velocity 값으로 이동하면 벽에 부딪힐 때 의도하지 않은 반응(튕김, 미끄러짐)이 발생할 수 있음 - FPS처럼 정확한 이동과 충돌 감지가 필요한 경우 부적합 ● 예측 불가능한 움직임 - Rigidbody 기반의 이동은 충돌 시 예상치 못한 회전이나 이동 발생 가능성 있음 - 정밀한 이동이 필요한 게임에서는 Character Controller보다 불리 ● 퍼포먼스 이슈 발생 가능 - 물리연산을 지속적으로 수행하므로 대규모 오브젝트를 처리 할 때 성능 저하가 발생 할 수 있음 - 최적화 하지 않을 시 CPU 부담 ↑ |
더보기
비교 요약본
구분 | Character Controller | Rigidbody |
이동 방식 | Move()로 직접 이동 | velocity, AddForce() 사용 |
충돌 감지 | O (예측 가능) | O (예측 불가, 물리 충돌 발생) |
물리 반응 (튕김, 회전) | X (없음) | O (자연스러움) |
중력 | 직접 구현 필요 | 자동 적용 |
성능 | 빠름 (CPU 부담 적음) | 연산 많아 느릴 수 있음 |
예측 가능성 | 높음 (정확한 이동 가능) | 낮음 (물리 연산으로 불안정) |
추천 게임 | FPS, 공포, 탐색, 플랫폼 게임 | 물리 퍼즐, 레이싱, 스포츠 게임 |
'Unity > 캐릭터' 카테고리의 다른 글
캐릭터와 오브젝트 상호작용(Raycast, public Interface IInteractable 코드 사용) (0) | 2025.03.19 |
---|---|
캐릭터 이동 구현 (Character Controller) (1) | 2025.03.19 |
캐릭터 이동(Input System) (0) | 2024.10.26 |