반응형
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 을 곱해준 것입니다.
코드가 작성되고 적용된 결과는 이와 같습니다.
감사합니다.
반응형