728x90

목차.

  1. 개요
  2. 소스코드
  3. 코드분석
  4. 결과

 

개요

 

대부분의 FPS 게임이나 3인칭 액션 게임에서 플레이어의 시점에 따라가는 카메라 제어 시스템을 자주 볼 수 있습니다.

이런 종류의 게임에서 플레이어는 마우스 움직임에 카메라 시점을 조절할 수 있는데,

이번 글에서 이러한 카메라 제어 시스템을 구현해 보겠습니다.

 

소스코드

 

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

public class CameraContoller : MonoBehaviour
{
    public float mouseSensitivity = 400f; //마우스감도

    private float MouseY;
    private float MouseX;

    void Update()
    {
        Rotate();
    }
    private void Rotate()
    {
        
        MouseX += Input.GetAxisRaw("Mouse X") * mouseSensitivity * Time.deltaTime;
   
        MouseY -= Input.GetAxisRaw("Mouse Y") * mouseSensitivity * Time.deltaTime;
  
        MouseY = Mathf.Clamp(MouseY, -90f, 90f); //Clamp를 통해 최소값 최대값을 넘지 않도록함

        transform.localRotation = Quaternion.Euler(MouseY, MouseX, 0f);// 각 축을 한꺼번에 계산
    }
}

 

 

코드분석

 

마우스 감도 설정

public float mouseSensitivity = 400f; // 마우스 감도

 

먼저 마우스 감도를 설정할 변수를 선언합니다. 

개인마다 선호하는 마우스감도가 모두 다르기 때문에, 이 변수를 통해 사용자가 원하는 감도를 조절할 수 있습니다.

 

카메라 회전처리

private void Rotate()
{
    MouseX += Input.GetAxisRaw("Mouse X") * mouseSensitivity * Time.deltaTime;
    MouseY -= Input.GetAxisRaw("Mouse Y") * mouseSensitivity * Time.deltaTime;
    
    // 상하 회전 각도를 제한하여 너무 뒤로 회전하지 않도록 합니다.
    MouseY = Mathf.Clamp(MouseY, -90f, 90f);

    // 카메라의 로컬 회전을 설정합니다.
    transform.localRotation = Quaternion.Euler(MouseY, MouseX, 0f);
}

 

마우스의 입력을 받아 카메라의 회전을 처리하는 함수입니다.

MouseX는 카메라의 좌우 회전을 담당하며,

MouseY는 카메라의 상하 회전을 담당합니다.

카메라-움직임에-따른-값-변경
카메라 움직임에따라 값 변경

 

Mathf.Clamp를 사용해서 카메라의 상하가 -90~90을 넘지 않게 제한해 주었습니다.

 

Quternion.Euler를 사용한 이유는 

짐벌락이 발생하지 않도록 유니티에서는 회전은 쿼터니언을 사용하고 있습니다.

 

쿼터니언에 대한 자세한 정보는

유니티 공식문서를 확인하면 있습니다.

 

 

Quaternion-Euler - Unity 스크립팅 API

Returns a rotation that rotates z degrees around the z axis, x degrees around the x axis, and y degrees around the y axis (in that order).

docs.unity3d.com

 

 

결과

 

이제 카메라에 해당 코드를 적용하면 마우스 움직임에 따라 카메라가 잘 회전하는 것을 볼 수 있습니다.

이번 글에서 마우스 감도를 조절하고, 마우스 입력을 받아 카메라의 회전을 처리하는 방법을 다뤄봤습니다.

728x90

+ Recent posts