SW 중심대학 OSS GIT 서버 박건태, 이승준, 고기완, 이준호 새로운 배포
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

64 lines
2.1 KiB

using UnityEngine;
[RequireComponent(typeof(Camera))]
public class SimpleCameraLook : MonoBehaviour
{
public Vector2 Sensitivity = new Vector2(40f, 40f);
public Vector2 LookRotationClamp = new Vector2(40f, 40f);
private Vector3 initialRotation;
private void Start()
{
initialRotation = ClampRotation360(transform.rotation.eulerAngles);
}
private void Update()
{
var lookVector = new Vector2(Input.GetAxisRaw("Horizontal") + Input.GetAxisRaw("Mouse X"),
Input.GetAxisRaw("Vertical") + Input.GetAxisRaw("Mouse Y"));
lookVector = Vector2.Scale(lookVector, Sensitivity) * Time.deltaTime;
var rotationBefore = transform.rotation.eulerAngles;
transform.Rotate(new Vector3(0f, lookVector.x, 0f), Space.World);
transform.Rotate(new Vector3(-lookVector.y, 0f, 0f), Space.Self);
var look = GetLookDelta();
var clampedLook = transform.rotation.eulerAngles;
if (look.x > LookRotationClamp.x)
{
clampedLook.x = rotationBefore.x;
}
if (look.y > LookRotationClamp.y)
{
clampedLook.y = rotationBefore.y;
}
transform.rotation = Quaternion.Euler(clampedLook);
}
private Vector3 GetLookDelta()
{
return GetDeltaRotation(ClampRotation360(transform.rotation.eulerAngles), initialRotation);
}
private Vector3 GetDeltaRotation(Vector3 source, Vector3 destination)
{
source.x = Mathf.Abs(Mathf.DeltaAngle(source.x, destination.x));
source.y = Mathf.Abs(Mathf.DeltaAngle(source.y, destination.y));
source.z = Mathf.Abs(Mathf.DeltaAngle(source.z, destination.z));
return source;
}
private Vector3 ClampRotation360(Vector3 eulerRotation)
{
return new Vector3(ClampAngle360(eulerRotation.x),
ClampAngle360(eulerRotation.y),
ClampAngle360(eulerRotation.z));
}
private float ClampAngle360(float angle)
{
angle %= 360f;
return angle % 360;
}
}