Unity에서 1인칭 컨트롤러 만들기

이 튜토리얼은 Unity에서 간단한 1인칭 컨트롤러를 만드는 방법을 안내합니다. 1인칭 컨트롤러를 사용하면 플레이어는 부드러운 움직임과 카메라 회전으로 3D 세계를 탐험할 수 있습니다. 기본 C# 스크립팅과 Unity의 기본 제공 CharacterController 구성 요소를 사용합니다.

1. 장면 설정

1인칭 컨트롤러의 기본 장면 환경을 설정하는 것으로 시작합니다.

  1. Unity에 새로운 3D 장면을 만듭니다.
  2. 게임오브젝트 > 3D 오브젝트 > 평면으로 이동하여 지면을 만듭니다.
  3. 플레이어가 걸어다닐 수 있을 만큼 비행기의 크기를 조정하세요.
  4. 게임오브젝트 > 3D 오브젝트 > 큐브로 가서 상호작용할 장애물이나 벽을 추가하세요.

2. 플레이어 객체 추가

플레이어를 표현하기 위해 캡슐 객체를 사용합니다.

  • 게임오브젝트 > 3D 오브젝트 > 캡슐로 가서 장면에 캡슐을 추가합니다.
  • 캡슐을 땅 위에 약간 올려놓습니다(예: Position = (0, 1, 0)).
  • 캡슐의 이름을 Player로 바꾸세요.
  • CharacterController가 충돌을 처리하므로 Capsule Collider 컴포넌트를 제거합니다.
  • 플레이어를 선택한 다음, 인스펙터에서 컴포넌트 추가를 클릭하고 CharacterController를 검색하여 플레이어 객체에 CharacterController 컴포넌트를 추가합니다.

3. 1인칭 컨트롤러 스크립트 작성

이제 플레이어의 움직임과 카메라 회전을 처리하는 스크립트를 만들어 보겠습니다.

  1. 프로젝트 창에서 마우스 오른쪽 버튼을 클릭하고 Create > C# Script를 선택합니다. 이름을 FirstPersonController로 지정합니다.
  2. 프로젝트 창에서 계층 구조의 플레이어로 스크립트를 끌어서 플레이어 객체에 연결합니다.

스크립트를 열고 내용을 다음 코드로 바꾸세요.

using UnityEngine;

public class FirstPersonController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float mouseSensitivity = 2f;
    public float gravity = -9.81f;

    private CharacterController controller;
    private Vector3 velocity;
    private Transform cameraTransform;

    void Start()
    {
        controller = GetComponent();
        cameraTransform = Camera.main.transform;
        cameraTransform.position = new Vector3(transform.position.x, transform.position.y + 1.5f, transform.position.z);
        cameraTransform.parent = transform; // Attach camera to player
    }

    void Update()
    {
        // Player movement
        float moveX = Input.GetAxis("Horizontal") * moveSpeed;
        float moveZ = Input.GetAxis("Vertical") * moveSpeed;
        Vector3 move = transform.right * moveX + transform.forward * moveZ;

        controller.Move(move * Time.deltaTime);

        // Apply gravity
        if (controller.isGrounded && velocity.y < 0)
        {
            velocity.y = -2f;
        }
        velocity.y += gravity * Time.deltaTime;
        controller.Move(velocity * Time.deltaTime);

        // Camera rotation
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;

        transform.Rotate(Vector3.up * mouseX);
        cameraTransform.Rotate(Vector3.left * mouseY);
    }
}

4. 카메라 부착하기

1인칭 시점의 경우 카메라는 플레이어에 연결되어야 합니다.

  • 계층 구조에서 메인 카메라를 선택하세요.
  • 플레이어 객체보다 약간 위에 배치합니다(예: Y = 1.5).
  • Hierarchy에서 Player 객체로 Camera를 끌어서 Player의 자식으로 만듭니다. 그러면 Player의 움직임과 회전을 따라가게 됩니다.

5. 입력 구성

Unity의 Input Manager는 이동을 위해 "Horizontal" 및 "Vertical"과 같은 미리 정의된 축 이름을 사용하고, 마우스 입력을 위해 "Mouse X" 및 "Mouse Y"를 사용합니다. 이러한 축 이름은 자동으로 구성되지만, Edit > Project Settings > Input Manager에서 감도를 조정할 수 있습니다.

6. 컨트롤러 테스트

이제 1인칭 컨트롤러가 준비되었으니 재생 버튼을 눌러 테스트해보세요.

  • W, A, S, D를 사용하여 플레이어를 앞, 뒤, 옆으로 이동하세요.
  • 마우스를 움직여 카메라를 회전하고 주변을 둘러보세요.
  • 플레이어가 자연스럽게 떨어지는지 확인하기 위해 높은 물체에서 내려와 중력이 작용하는지 확인하세요.

7. 컨트롤러 강화

다음을 추가하여 1인칭 컨트롤러를 더욱 향상시킬 수 있습니다.

  • Shift 키를 누르고 있을 때 moveSpeed를 증가시켜 스프린트 기능을 구현합니다.
  • 플레이어가 스페이스바를 눌렀을 때를 감지하고 위쪽 속도를 적용하여 점프 논리를 구현합니다.
  • 플레이어와 주변 환경 간의 더욱 복잡한 상호작용을 위해 기어오르거나 웅크리는 동작이 추가되었습니다.

결론

이 기본적인 1인칭 컨트롤러를 사용하면 이제 3D 환경을 탐험할 수 있는 기능적인 플레이어 설정이 있습니다. 스크립트를 사용자 지정하고 확장하면 게임의 필요에 맞게 더 많은 기능과 상호 작용을 추가할 수 있습니다.