Unity에서 1인칭 컨트롤러 만들기
이 튜토리얼은 Unity에서 간단한 1인칭 컨트롤러를 만드는 방법을 안내합니다. 1인칭 컨트롤러를 사용하면 플레이어는 부드러운 움직임과 카메라 회전으로 3D 세계를 탐험할 수 있습니다. 기본 C# 스크립팅과 Unity의 기본 제공 CharacterController 구성 요소를 사용합니다.
1. 장면 설정
1인칭 컨트롤러의 기본 장면 환경을 설정하는 것으로 시작합니다.
- Unity에 새로운 3D 장면을 만듭니다.
- 게임오브젝트 > 3D 오브젝트 > 평면으로 이동하여 지면을 만듭니다.
- 플레이어가 걸어다닐 수 있을 만큼 비행기의 크기를 조정하세요.
- 게임오브젝트 > 3D 오브젝트 > 큐브로 가서 상호작용할 장애물이나 벽을 추가하세요.
2. 플레이어 객체 추가
플레이어를 표현하기 위해 캡슐 객체를 사용합니다.
- 게임오브젝트 > 3D 오브젝트 > 캡슐로 가서 장면에 캡슐을 추가합니다.
- 캡슐을 땅 위에 약간 올려놓습니다(예: Position = (0, 1, 0)).
- 캡슐의 이름을 Player로 바꾸세요.
- CharacterController가 충돌을 처리하므로 Capsule Collider 컴포넌트를 제거합니다.
- 플레이어를 선택한 다음, 인스펙터에서 컴포넌트 추가를 클릭하고 CharacterController를 검색하여 플레이어 객체에 CharacterController 컴포넌트를 추가합니다.
3. 1인칭 컨트롤러 스크립트 작성
이제 플레이어의 움직임과 카메라 회전을 처리하는 스크립트를 만들어 보겠습니다.
- 프로젝트 창에서 마우스 오른쪽 버튼을 클릭하고 Create > C# Script를 선택합니다. 이름을 FirstPersonController로 지정합니다.
- 프로젝트 창에서 계층 구조의 플레이어로 스크립트를 끌어서 플레이어 객체에 연결합니다.
스크립트를 열고 내용을 다음 코드로 바꾸세요.
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 환경을 탐험할 수 있는 기능적인 플레이어 설정이 있습니다. 스크립트를 사용자 지정하고 확장하면 게임의 필요에 맞게 더 많은 기능과 상호 작용을 추가할 수 있습니다.