Unity 캐릭터 컨트롤러 가이드
Unity에는 다양한 게임에서 캐릭터를 제어하는 데 사용할 수 있는 캐릭터 컨트롤러(Character Controller) 컴포넌트가 있습니다. 이 문서에서는 캐릭터 컨트롤러의 주요 기능 및 설정에 대해 설명하고 활용 예제를 제시합니다.
캐릭터 컨트롤러란?
캐릭터 컨트롤러는 Rigidbody 물리를 사용하지 않고 1인 또는 3인 플레이어 캐릭터를 제어할 수 있는 컴포넌트입니다. 캡슐 형태의 collider로 캐릭터를 움직이게 하며, 충돌 시 제약을 받습니다.
주요 속성
| 속성 | 기능 |
|---|---|
| Slope Limit | 지정된 각도 이하의 경사에서만 캐릭터가 오를 수 있도록 제한합니다. |
| Step Offset | 지정된 높이 이하의 계단을 올라가기 위한 값으로, 캐릭터의 높이보다 작아야 합니다. |
| Skin Width | 두 콜라이더가 겹칠 수 있는 간격으로, 이 값이 커질수록 지터링이 줄어듭니다. |
| Min Move Distance | 캐릭터가 이 값 이하로 움직이려 할 경우 움직이지 않도록 합니다. 보통 이 값은 0으로 설정하는 것이 좋습니다. |
| Center | 콜라이더의 중심점을 오프셋하여 월드 공간 내에서 위치를 조정합니다. |
| Radius | 캡슐 콜라이더의 반지름으로, 주로 캐릭터의 너비로 사용됩니다. |
| Height | 캐릭터의 캡슐 콜라이더 높이를 조정합니다. |
캐릭터 컨트롤러의 장점
- 비현실적인 동작 간소화: 일반적인 물리에는 의존하지 않고 스크립트를 통해 캐릭터를 제어할 수 있습니다.
- 충돌 처리: 캐릭터가 벽에 부딪히면 자연스럽게 이동이 조절됩니다.
- 계단과 경사 처리: 지정한 Step Offset과 Slope Limit를 통해 자연스러운 이동 가능한 면을 설정할 수 있습니다.
캐릭터 세부 조정
- 인간형 캐릭터의 경우, Height는 2미터 정도로 설정하는 것이 권장됩니다.
- Slope Limit은 너무 작지 않도록 해야 하며, 대부분의 경우 90도 설정이 적합합니다.
- Skin Width는 최소 0.01보다 크게 설정하고, Radius의 10% 이상으로 설정하는 것이 좋습니다.
활용 예제
1. 기본 이동 스크립트
void Update()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(horizontal, 0, vertical);
controller.Move(movement * speed * Time.deltaTime);
}
2. 점프 기능 추가
if (Input.GetButtonDown("Jump") && isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
}
3. 충돌 응답 처리
void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
if (body != null && !body.isKinematic)
{
body.AddForceAtPosition(controller.velocity * pushForce, hit.point);
}
}
유의 사항
- 캐릭터가 자주 걸리는 경우 Skin Width를 조정하십시오.
- Unity 인스펙터에서 캐릭터 컨트롤러 속성을 변경하면 씬 내의 컨트롤러가 재생성되므로 기존 트리거 연락처가 사라질 수 있습니다.
캐릭터 컨트롤러는 다양한 게임에서 유용하게 활용될 수 있으므로, 위의 설정과 예제를 바탕으로 창의적인 캐릭터 이동 구현에 도전해보세요!