728x90
목차.
개요
대부분의 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를 사용한 이유는
짐벌락이 발생하지 않도록 유니티에서는 회전은 쿼터니언을 사용하고 있습니다.
쿼터니언에 대한 자세한 정보는
유니티 공식문서를 확인하면 있습니다.
결과
이제 카메라에 해당 코드를 적용하면 마우스 움직임에 따라 카메라가 잘 회전하는 것을 볼 수 있습니다.
이번 글에서 마우스 감도를 조절하고, 마우스 입력을 받아 카메라의 회전을 처리하는 방법을 다뤄봤습니다.
728x90
'유니티' 카테고리의 다른 글
[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 |