53 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|