53 lines
1.3 KiB
C#

using UnityEngine;
namespace Kryz.CharacterStats.Examples
{
public class MouseLook : MonoBehaviour
{
public Transform RotateHorizontally;
public Transform RotateVertically;
public float MouseSensitivity = 120;
public float MaxLook = 80;
public float MinLook = -60;
private void OnValidate()
{
if (RotateHorizontally == null)
RotateHorizontally = transform;
if (RotateVertically == null && transform.childCount > 0)
RotateVertically = transform.GetChild(0);
}
private void Update()
{
CameraLook();
}
private void CameraLook()
{
float rotationX = Input.GetAxis("Mouse X") * Time.deltaTime;
float rotationY = -Input.GetAxis("Mouse Y") * Time.deltaTime;
if (rotationX != 0)
{
RotateHorizontally.transform.Rotate(0, rotationX * MouseSensitivity, 0);
}
if (rotationY != 0)
{
Vector3 angles = RotateVertically.transform.localEulerAngles;
angles.x += rotationY * MouseSensitivity;
if (angles.x > MaxLook && angles.x < MinLook + 360) {
float diff1 = Mathf.DeltaAngle(angles.x, MinLook);
float diff2 = Mathf.DeltaAngle(angles.x, MaxLook);
angles.x = Mathf.Abs(diff1) < Mathf.Abs(diff2) ? MinLook : MaxLook;
}
RotateVertically.transform.localEulerAngles = angles;
}
}
}
}