유니티 기초 강좌: 시야의 상하 회전

유니티(Unity)는 게임 개발을 위한 강력한 엔진으로, 다양한 2D 및 3D 애플리케이션을 만들 수 있는 기능을 제공합니다.
본 강좌에서는 유니티에서 카메라의 시야를 상하 회전시키는 방법에 대해 다루겠습니다.
이 과정을 통해 여러분은 플레이어의 시점을 조작하는 방법을 익히고, 더 나아가 게임 내에서 몰입감 있는 경험을 제공할 수 있을 것입니다.

1. 기본 설정

먼저, 유니티를 실행하여 새로운 프로젝트를 생성합니다.
3D 프로젝트를 선택하고 적절한 프로젝트 이름을 설정한 후, 프로젝트가 실행되면 기본 씬을 구성합니다.
씬의 장면 뷰에서 Main Camera 객체를 선택하고, 카메라의 위치와 회전 각도를 조정해 보세요.
카메라는 모든 게임 오브젝트를 표시하는 기준이 되므로, 적절하게 설정되어야 합니다.

2. 카메라와 플레이어 캐릭터 설정

플레이어 캐릭터를 설정하기 위해, GameObject 메뉴에서 3D Object > Cylinder를 선택하여 기본 캐릭터 모델을 생성합니다.
이 오브젝트는 간단한 형태의 플레이어 캐릭터가 됩니다. 생성한 실린더의 이름을 ‘Player’로 변경하고,
Main Camera를 플레이어의 자식으로 설정합니다.
이렇게 하면 카메라가 플레이어와 함께 움직이도록 할 수 있습니다.

3. 입력 시스템 설정

카메라의 상하 회전을 구현하기 위해 입력 처리를 위해 스크립트를 작성할 것입니다. Assets 폴더 안에 Scripts라는 폴더를 만들고,
이 안에 CameraController.cs라는 스크립트를 생성합니다.
아래 코드를 스크립트에 붙여넣습니다:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour
{
    public Transform player; // 플레이어 캐릭터
    public float sensitivity = 5.0f; // 마우스 감도
    public float clampAngle = 80.0f; // 회전 제한 각도

    private float rotX = 0.0f; // 상하 회전 각도
    private float rotY = 0.0f; // 좌우 회전 각도

    void Start()
    {
        rotX = transform.localEulerAngles.x; // 초기 상하 회전 각도 설정
        rotY = transform.localEulerAngles.y; // 초기 좌우 회전 각도 설정

        Cursor.lockState = CursorLockMode.Locked; // 마우스 커서를 숨김
    }

    void Update()
    {
        rotX -= Input.GetAxis("Mouse Y") * sensitivity; // 마우스 Y 입력으로 상하 회전 계산
        rotY += Input.GetAxis("Mouse X") * sensitivity; // 마우스 X 입력으로 좌우 회전 계산

        rotX = Mathf.Clamp(rotX, -clampAngle, clampAngle); // 회전 각도 제한

        transform.localEulerAngles = new Vector3(rotX, rotY, 0); // 회전 적용
        player.Rotate(0, Input.GetAxis("Mouse X") * sensitivity, 0); // 플레이어 캐릭터의 좌우 회전 적용
    }
}

스크립트를 작성한 후, Main Camera 객체를 선택하고, Add Component 버튼을 클릭하여 작성한
CameraController 스크립트를 추가합니다. 그 후, Player 오브젝트를 CameraController 스크립트의
Player 속성에 드래그하여 연결해줍니다.

4. 테스트 및 조정

이제 모든 설정이 완료되었습니다. 씬을 저장한 후, 실행 버튼을 클릭하여 게임을 테스트해 보세요.
마우스를 움직이면 카메라가 상하로 회전하고, 플레이어 캐릭터가 좌우로 회전하는 모습을 확인할 수 있습니다.
감도를 조정하고 싶다면, sensitivity 변수의 값을 변경하여 원하는 감도를 얻을 수 있습니다.

5. 추가 기능 구현

기본적인 상하 회전 외에도, 좀 더 다양한 기능을 추가하여 보다 나은 사용자 경험을 제공할 수 있습니다.
예를 들어, 카메라의 움직임을 부드럽게 하기 위해 SmoothDamp 함수를 사용할 수 있습니다.


private Vector3 velocity = Vector3.zero; // 속도 변수

void LateUpdate()
{
    Vector3 targetPosition = player.position; // 목표 위치
    transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, 0.3f); // 부드러운 카메라 이동
}

LateUpdate 메서드를 사용하여 프레임 간 속도를 고려해 카메라를 부드럽게 이동시키는 방법입니다.
이를 통해 카메라가 더 자연스럽게 플레이어를 따라가는 효과를 줄 수 있습니다.

6. 결론

이 강의를 통해 유니티에서 카메라의 시야를 상하로 회전시키는 기본적인 방법과 이를 통한 플레이어의 시점 조작에 대해 알아보았습니다.
이 기본기를 바탕으로 다양한 게임 설계 및 구현에 활용할 수 있습니다.
추가로, 유니티에서는 더욱 많은 기능을 제공하므로, 지속적으로 학습하며 발전시키는 것이 중요합니다.

앞으로도 유니티 기초 강좌 시리즈에서 다양한 주제를 다룰 예정이니, 많은 관심 부탁드립니다!
Happy Coding!