70 lines
1.6 KiB
C#
70 lines
1.6 KiB
C#
using UnityEngine;
|
|
|
|
public class RPGCamera : MonoBehaviour
|
|
{
|
|
public Transform Target;
|
|
|
|
public float MaximumDistance;
|
|
|
|
public float MinimumDistance;
|
|
|
|
public float ScrollModifier;
|
|
|
|
public float TurnModifier;
|
|
|
|
private Transform m_CameraTransform;
|
|
|
|
private Vector3 m_LookAtPoint;
|
|
|
|
private Vector3 m_LocalForwardVector;
|
|
|
|
private float m_Distance;
|
|
|
|
private void Start()
|
|
{
|
|
m_CameraTransform = base.transform.GetChild(0);
|
|
m_LocalForwardVector = m_CameraTransform.forward;
|
|
m_Distance = (0f - m_CameraTransform.localPosition.z) / m_CameraTransform.forward.z;
|
|
m_Distance = Mathf.Clamp(m_Distance, MinimumDistance, MaximumDistance);
|
|
m_LookAtPoint = m_CameraTransform.localPosition + m_LocalForwardVector * m_Distance;
|
|
}
|
|
|
|
private void LateUpdate()
|
|
{
|
|
UpdateDistance();
|
|
UpdateZoom();
|
|
UpdatePosition();
|
|
UpdateRotation();
|
|
}
|
|
|
|
private void UpdateDistance()
|
|
{
|
|
m_Distance = Mathf.Clamp(m_Distance - Input.GetAxis("Mouse ScrollWheel") * ScrollModifier, MinimumDistance, MaximumDistance);
|
|
}
|
|
|
|
private void UpdateZoom()
|
|
{
|
|
m_CameraTransform.localPosition = m_LookAtPoint - m_LocalForwardVector * m_Distance;
|
|
}
|
|
|
|
private void UpdatePosition()
|
|
{
|
|
if (!(Target == null))
|
|
{
|
|
base.transform.position = Target.transform.position;
|
|
}
|
|
}
|
|
|
|
private void UpdateRotation()
|
|
{
|
|
if (Input.GetMouseButton(0) || Input.GetMouseButton(1) || Input.GetButton("Fire1") || Input.GetButton("Fire2"))
|
|
{
|
|
base.transform.Rotate(0f, Input.GetAxis("Mouse X") * TurnModifier, 0f);
|
|
}
|
|
if ((Input.GetMouseButton(1) || Input.GetButton("Fire2")) && Target != null)
|
|
{
|
|
Target.rotation = Quaternion.Euler(0f, base.transform.rotation.eulerAngles.y, 0f);
|
|
}
|
|
}
|
|
}
|