Unity에서 부드러운 마우스 움직임을 만드는 방법

부드러운 마우스 움직임은 전반적인 사용자 경험을 개선하는 데 도움이 되는 게임 개발의 필수적인 측면입니다. 부드러운 마우스 움직임을 구현하면 게임의 카메라 또는 플레이어 컨트롤을 더 유동적이고 반응성 있게 만들어 세련되고 몰입감 있는 게임 플레이 경험을 얻을 수 있습니다. 이 튜토리얼에서는 Unity에서 부드러운 마우스 움직임을 설정하는 방법을 단계별 지침과 C# 코드 예제와 함께 살펴보겠습니다. 또한 게임에서 이 기능을 구현하려는 가능한 이유에 대해서도 논의합니다.

부드러운 마우스 움직임을 구현하는 이유는 무엇입니까?

게임에서 부드러운 마우스 움직임이 중요한 이유는 다음과 같습니다.

  • 향상된 사용자 경험: 매끄러운 컨트롤 덕분에 플레이어가 자신의 행동을 더 잘 제어할 수 있다는 느낌이 들며, 이는 특히 1인칭이나 3인칭 게임에서 몰입감에 필수적입니다.
  • 향상된 정확도: 마우스 움직임을 미세하게 조정하면 카메라를 더 정확하게 제어할 수 있습니다. 이는 슈팅 게임이나 신중한 조준이 필요한 게임에서 중요한 요소입니다.
  • 세련된 디자인과 느낌: 게임이 더 전문적이고 세련된 느낌을 주어 플레이어를 유지하고 참여시키는 데 필수적입니다.
  • 멀미 감소: 떨리거나 지나치게 민감한 카메라 움직임은 플레이어에게 불편함이나 멀미를 유발할 수 있습니다. 부드러운 마우스 움직임은 이 위험을 줄이는 데 도움이 될 수 있습니다.

부드러운 마우스 움직임 설정 Unity

Unity에서 마우스를 부드럽게 움직이는 방법을 단계별로 살펴보겠습니다.

1단계: 새 스크립트 만들기

먼저, 마우스 움직임을 제어하는 ​​새로운 C# 스크립트를 만듭니다. 이 스크립트의 이름을 MouseLook과 같이 지정할 수 있습니다.

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;

    void Start()
    {
        // Lock the cursor in the middle of the screen
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get mouse movement input
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        // Invert the Y-axis for a more natural control feel
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        // Rotate the camera around the X-axis (up and down)
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

        // Rotate the player object around the Y-axis (left and right)
        playerBody.Rotate(Vector3.up * mouseX);
    }
}

이 코드에서는:

  • mouseSensitivity는 마우스 입력의 민감도를 제어합니다.
  • playerBody은 플레이어의 변형을 나타내며, 마우스를 수평으로 움직일 때 Y축을 따라 회전합니다.
  • xRotation 변수는 현재의 수직 회전(위쪽 및 아래쪽)을 저장하며, 과도한 회전을 방지하기 위해 -90도와 90도 사이로 제한됩니다.
  • 커서가 게임 창 밖으로 움직이는 것을 방지하기 위해 마우스 커서를 화면 중앙에 고정합니다.

2단계: 스크립트를 카메라에 연결

이제 스크립트가 준비되었으니 Unity 장면으로 가서 MouseLook 스크립트를 카메라(예: Main Camera 객체)에 연결합니다.

그런 다음, 인스펙터에서 스크립트의 Player Body 필드로 플레이어 객체(일반적으로 캐릭터 컨트롤러나 플레이어를 나타내는 빈 게임 객체)를 끌어서 playerBody 필드를 할당합니다.

3단계: 마우스 감도 조정

mouseSensitivity 값을 실험하여 원하는 수준의 제어를 달성할 수 있습니다. 좋은 시작점은 100이지만 원하는 수준의 정밀도에 따라 더 높거나 낮게 조정할 수 있습니다.

4단계: 입력 원활함 처리

더욱 매끄러운 움직임을 위해 마우스 입력 값에 보간을 적용할 수 있습니다. 이렇게 하면 카메라가 한 위치에서 다음 위치로 점프하는 대신 각 프레임 사이에서 부드럽게 전환됩니다. 이를 구현하는 방법의 예는 다음과 같습니다.

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;
    private Vector2 smoothInputVelocity;
    public float smoothTime = 0.1f;
    private Vector2 currentMouseDelta;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get raw mouse input
        Vector2 targetMouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * mouseSensitivity;

        // Smooth the mouse input
        currentMouseDelta = Vector2.SmoothDamp(currentMouseDelta, targetMouseDelta, ref smoothInputVelocity, smoothTime);

        xRotation -= currentMouseDelta.y * Time.deltaTime;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        playerBody.Rotate(Vector3.up * currentMouseDelta.x * Time.deltaTime);
    }
}

이 업데이트된 버전은 Vector2.SmoothDamp을 사용하여 매끄럽게 하는 것을 도입합니다. smoothTime 변수는 전환이 얼마나 매끄러워야 하는지 제어합니다. 값이 낮을수록 움직임이 더 반응성이 높아지고 값이 높을수록 움직임이 더 느리고 점진적으로 나타납니다.

5단계: 테스트 및 미세 조정

스크립트를 제자리에 놓으면 게임을 테스트하고 마우스 움직임이 얼마나 매끄러워지기를 원하는지에 따라 민감도와 매끄러움 값을 조정합니다. 또한 클램핑 각도를 조정하여 카메라 움직임의 자유도를 더 많이 또는 덜 허용할 수 있습니다.

결론

Unity 프로젝트에서 부드러운 마우스 움직임을 구현하면 정확하고 유동적인 카메라 제어를 제공하여 플레이어 경험을 크게 향상시킬 수 있습니다. 이 튜토리얼은 기본적인 마우스 움직임 시스템을 설정하고 부드럽게 하는 기술로 강화하는 방법을 안내했습니다.