Unity 캐릭터 컨트롤러 사용법
이 문서에서는 Unity에서 캐릭터 컨트롤러를 사용하여 1인칭 또는 3인칭 게임의 캐릭터 움직임을 제어하는 방법에 대해 설명합니다. 캐릭터 컨트롤러는 물리적 특성을 이용하여 오브젝트의 충돌과 움직임을 조절하며, 플레이어의 입력에 따라 유연하게 반응할 수 있습니다.
캐릭터 컨트롤러란?
캐릭터 컨트롤러는 Unity의 컴포넌트 중 하나로, 캐릭터에 특정한 물리 행동을 부여할 수 있습니다. 이것은 아래와 같은 기능을 제공합니다:
- 단순한 형태의 콜라이더: 캐릭터는 캡슐 형태의 콜라이더를 사용하며, 항상 똑바로 서 있게 됩니다.
- 물리 특성 없음: 리지드 바디를 필요로 하지 않으며, 운동량 효과가 없습니다. 따라서 캐릭터는 즉시 방향을 바꿀 수 있습니다.
- 정적 콜라이더와의 상호작용: 캐릭터는 바닥에서 뛸 수 있고, 벽에 충돌하여 멈출 수 있습니다.
적용 예
기본 캐릭터 컨트롤러 설정
먼저, Unity에서 캐릭터 컨트롤러를 사용하는 기본적인 방법을 알아보겠습니다.
- 프로젝트 생성: Unity Hub를 통해 새로운 3D 프로젝트를 만듭니다.
- 캐릭터 컨트롤러 추가:
- 게임 오브젝트를 생성하고, 이름을 "Player"로 변경합니다.
- Inspector 패널에서 "Add Component"를 클릭하고 "Character Controller"를 추가합니다.
- 스크립트 작성: 이동 로직을 추가하기 위해 새로운 C# 스크립트를 생성하고 아래의 코드를 추가합니다.
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public CharacterController controller;
public float speed = 12f;
public float gravity = -9.81f;
public float jumpHeight = 3f;
public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;
private Vector3 velocity;
private bool isGrounded;
void Update()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
if (isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * speed * Time.deltaTime);
if (Input.GetButtonDown("Jump") && isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
}
위 코드는 플레이어의 입력을 기반으로 이동과 점프를 구현합니다.
추가 기능 구현
1. 카메라 따라가기
플레이어가 이동할 때 카메라가 따라가도록 구현할 수 있습니다. 카메라를 플레이어 오브젝트의 자식으로 만들고, 적절한 위치로 이동시킵니다.
2. 애니메이션 추가
캐릭터에 애니메이션을 추가하여 생동감을 줄 수 있습니다. Animator 컴포넌트를 추가하고, 애니메이션 클립과 상태를 설정하여 재생합니다.
요약
캐릭터 컨트롤러는 캐릭터의 움직임을 간편하게 관리할 수 있는 유용한 도구입니다. Unity의 물리 시스템을 이해하면 캐릭터의 움직임을 더 현실감 있게 만들 수 있으며, 다양한 기능을 추가하여 더욱 몰입감 있는 게임을 개발할 수 있습니다.
참고 자료
이 문서를 통해 캐릭터 컨트롤러의 기본적인 사용법과 몇 가지 활용 예제를 익히셨기를 바랍니다.