본문 바로가기

# 프로그래밍 개발/01. Unity

1인칭 캐릭터 마우스로 고개 회전 시키기 유니티 C# 코드

반응형

1인칭 캐릭터 FPS 게임에서는 마우스를 활용해 캐릭터의 고개를 회전 시킵니다. 어떻게 보면, 감도라고도 할 수 있는 영역일 것 같습니다. 그렇기에 이 부분은 한치의 오차도 없이 코드가 작성되어야 하는 부분이기도 합니다. 유저들이 가장 불만을 토로하는 부분이기도 하거든요. 

코드 먼저 공개합니다. 

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

public class PlayerHead : MonoBehaviour
{
    public float rotSpeed = 100f;
    public float rx, ry; 

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // 마우스의 입력 값으 받아온다.
        float mx = Input.GetAxis("Mouse X");
        float my = Input.GetAxis("Mouse Y");

        // 스피트와 입력 값 그리고 deltatime 값을 곱해준다.
        rx += rotSpeed * my * Time.deltaTime;
        ry += rotSpeed * mx * Time.deltaTime;

        // rx의 값을 -80부터 80으로 제한한다. 
        rx = Mathf.Clamp(rx, -80, 80);
        
        // 회전 할 값을 넣어준다.
        transform.eulerAngles = new Vector3(-rx, ry, 0);
    }
}

 

1. 마우스의 위치 값을 받아오기. 

mouse X와 mouse Y 값은 Project Settings 메뉴에서 Input Manager를 통해 확인하실 수 있습니다. 이외의 값을 원하실 경우, 다른 값을 취득해 사용하시면 됩니다. 

 

2. 회전 값의 속도와 deltatime 곱하기. 

얻어온 마우스 값에 회전 값의 속도와 프레임 단위로 곱해주기 위해서 deltatime을 곱해줍니다. 

 

3. y 축의 경우 캐릭터가 고래를 돌릴 수 있는 구간을 한정해야 합니다. 

그래서 Mathf.Clamp() 함수를 이용해, -80보다 작으면 -80으로 고정하고, 80보다 크면 80으로 고정하라는 값을 작성해줍니다. 

 

4. 캐릭터의 rotation 값에 계산된 값을 적용해줍니다. 

transform.eulerAngles = new Vector3(-rx, ry, 0);

이때 x의 값은 거꾸로되어 있기 때문에 -1 을 곱해준 것입니다. 

코드가 작성되고 적용된 결과는 이와 같습니다. 

감사합니다.

반응형