chyam

[unity 3d] - 마우스 움직임을 통해 플레이어가 해당 방향을 바라보도록 설정하기 본문

unity

[unity 3d] - 마우스 움직임을 통해 플레이어가 해당 방향을 바라보도록 설정하기

chyam_eun 2025. 2. 27. 23:16

 
이전에는 좌우 방향을 이용하여 플레이어의 방향을 조정했습니다.
 
아래는 참고한 블로그입니다.

[Unity 3D] 마우스 움직임으로 카메라 제어하는 방법

목차. 개요 소스코드 코드분석 결과 개요 대부분의 FPS 게임이나 3인칭 액션 게임에서 플레이어의 시점에 따라가는 카메라 제어 시스템을 자주 볼 수 있습니다. 이런 종류의 게임에서 플레이어는

wookeee.tistory.com

 
 
이번에는 마우스 움직임을 통해 플레이어의 방향을 조정해주었습니다!
 
먼저 마우스 움직임 값을 받을 변수를 선언해줍니다.

    private float MouseY;
    private float MouseX;

 
아래는 Move() 메서드로, 이동하는 함수를 구현하였습니다.

    void Move()
    {
    	...
        Vector3 moveDirection = (transform.forward * v + transform.right * h).normalized;
        transform.position += moveDirection * Speed * Time.deltaTime;

        MouseX += Input.GetAxisRaw("Mouse X") * mouseSensitivity * Time.deltaTime;
        MouseY -= Input.GetAxisRaw("Mouse Y") * mouseSensitivity * Time.deltaTime;
        MouseY = Mathf.Clamp(MouseY, -15f, 15f); 
        transform.localRotation = Quaternion.Euler(MouseY, MouseX, 0f);
        ...
    }

 
transform.forward는 현재 오브젝트의 정면 방향을 나타내는 단위 벡터입니다. 
이때 v를 곱해주어 "W"나 위쪽 방향키를 누르면 정면으로 이동하고, "S"나 아래쪽 방향키를 누르면 뒤로 이동하게 됩니다.
앞뒤를 이동하는것은 z축이동이기 때문에 transform.forward * v 는 (0,0,v)와 같게됩니다.
 
transform.right는 현재 오브젝트의 오른쪽 방향을 나타내는 단위 벡터입니다.
위와같이 h를 곱해주어 "D"나 오른쪽 방향키를 누르면 오른쪽으로 이동하고, "A"나 왼쪽 방향키를 누르면 왼쪽로 이동하게 됩니다.
좌우는 x축이동이기 때문에 transform. right * h 는 (h,0,0)와 같게됩니다.
 
nomalized을 해주면 정규화를 통해 대각선을 이동할때 속도가 증가하는것을 막을수있습니다.
 
따라서 transform.forward * v + transform. right * h 는 (h,0,v)가 됩니다.

MouseX += Input.GetAxisRaw("Mouse X") * mouseSensitivity * Time.deltaTime;
MouseY -= Input.GetAxisRaw("Mouse Y") * mouseSensitivity * Time.deltaTime;

GetAxisRaw("MouseX")는 마우스를 오른쪽으로 움직이면 (+) 값이 나오고, 왼쪽으로 움직이면 (-)값이 나옵니다.
GetAxisRaw("MouseY")는 마우스를 위쪽으로 움직이면 (+) 값이 나오고, 아래쪽으로 움직이면 (-)값이 나옵니다. 

MouseY = Mathf.Clamp(MouseY, -15f, 15f);

 
Clamp를 통해 특정 값을 최소와 최대범위 내로 제한해주었습니다.
아래 위로 움직이는 각도를 -15~15사이로 제한하였습니다.
 

transform.localRotation = Quaternion.Euler(MouseY, MouseX, 0f);

오일러각을 쿼터니언으로 변환해주어 회전시켜주었습니다.
MouseY가 x좌표인 이유는 x축을 회전시키면 위아래로 회전하고, MouseX는 y축을 회전시키면 양옆으로 회전하기 때문입니다!