목차.
개요
대부분의 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
결과
이제 카메라에 해당 코드를 적용하면 마우스 움직임에 따라 카메라가 잘 회전하는 것을 볼 수 있습니다.
이번 글에서 마우스 감도를 조절하고, 마우스 입력을 받아 카메라의 회전을 처리하는 방법을 다뤄봤습니다.
'유니티' 카테고리의 다른 글
[Unity 3D] 유니티 3D : AddForce 벽 관통, 뚫림, 오브젝트 통과 문제 (0) | 2022.08.08 |
---|---|
[Unity] 캔버스 활성화 비활성화(FadeIn,FadeOut) (0) | 2022.08.08 |
[Unity] 마우스 커서 활성화, 비활성화 (0) | 2022.08.06 |
[Unity 3D] 이단점프 구현하기 (0) | 2022.08.03 |
[Unity 3D] 점프 구현 (0) | 2022.07.21 |