오브젝트(사람) 안에 카메라를 넣고 카메라에 이 코드를 넣었습니다.(1인칭 시점)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseCtrl : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0}
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
void Start()
{
}
void Update()
{
if (axes == RotationAxes.MouseXAndY)
{
float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
transform.parent.transform.eulerAngles = new Vector3(0, rotationX, 0);
}
}
}
float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);
rotation x랑 y를 구현하는 방식이 다른지 모르겠습니다.
y값은 위와 아래만 봐서 Mathf.Clamp로 값의 범위를 정해준 건 이해가 가지만 대체 왜
float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
X와 Y의 구현 방법이 다른 걸까요?
transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0); 아래 이 한 줄도 이해가 안가네요 ㅜㅜ
이해가 안가서 찝찝한데 명쾌하게 알고 계신 분 없습니까..
고개를 위로 들고 좌우로 움직일때 X좌표를 생각해보면 알 수 있을거같은데용
직접 스스로 생각해보시면 됩니다. y축회전과 (마우스x) x축회전의 코드가 같다면 그건 배그 3인칭으로 따진다면 Alt키 누르고 회전이랑 똑같습니다. ( 즉 캐릭터가 좌우 y축회전을 하지않고 카메라만 회전 )
x축 (위이래) 회전의 경우 캐릭터는 눕거나 쓰러지면 이상하므로 카메라만 회전하고 캐릭터는 회전할 필요 없습니다. 반면 y축 (카메라) 회전은 카메라와 캐릭터가 함께 회전해야 합니다.