等一下會用到的參數先放在前面,反正後面會提到。
public class FreeLookCam : PivotBasedCameraRig
{
[SerializeField] private float m_MoveSpeed = 1f;
[Range(0f, 10f)] [SerializeField] private float m_TurnSpeed = 1.5f; /
[SerializeField] private float m_TurnSmoothing = 0.0f;
[SerializeField] private float m_TiltMax = 75f;
[SerializeField] private float m_TiltMin = 45f;
[SerializeField] private bool m_LockCursor = false;
[SerializeField] private bool m_VerticalAutoReturn = false;
private float m_LookAngle;
private float m_TiltAngle;
private const float k_LookDistance = 100f;
private Vector3 m_PivotEulers;
private Quaternion m_PivotTargetRot;
private Quaternion m_TransformTargetRot;
先鎖住滑鼠。
protected override void Awake()
{
base.Awake();
Cursor.lockState = m_LockCursor ? CursorLockMode.Locked :CursorLockMode.None;
Cursor.visible = !m_LockCursor;
m_PivotEulers = m_Pivot.rotation.eulerAngles;
m_PivotTargetRot = m_Pivot.transform.localRotation;
m_TransformTargetRot = transform.localRotation;
}
protected void Update()
{
HandleRotationMovement();
if (m_LockCursor && Input.GetMouseButtonUp(0))
{
Cursor.lockState = m_LockCursor ? CursorLockMode.Locked : CursorLockMode.None;
Cursor.visible = !m_LockCursor;
}
}
要一層一層的去拆這個鏡頭的程式碼,我還是先開個同樣的框架出來,先斷在這裡。
.......
其實這樣的寫法,沒有必要,如果是第一人稱遊戲,直接把camera綁在頭上,讓頭跟著滑鼠轉動就可以了。