using UnityEngine; namespace Funique { /// /// Camera following mode control
/// ------------------------------------------------
/// 攝影機跟隨模式控制器 ///
[AddComponentMenu("Funique/Core/Follow Camera")] public class FollowCam : MonoBehaviour { // 變數 #region Field [SerializeField] Transform headsetTransform; [SerializeField] bool UseDD; [SerializeField] DynamicDirection DD; [SerializeField] Vector3 DDOffset; [SerializeField] Vector3 DDMultiple; [SerializeField] public bool is3dh; public bool is4dof = false; float posZ; Vector3 headsetOffset; #endregion // Unity 事件 #region Unity Event private void Update() { if (!is4dof) { if (UseDD) { transform.position = new Vector3(headsetTransform.position.x, headsetTransform.position.y, 1); transform.localRotation = Quaternion.LookRotation(DD.Dir, Vector3.up); transform.localEulerAngles = new Vector3( (transform.localEulerAngles.x + DDOffset.x) * DDMultiple.x, (transform.localEulerAngles.y + DDOffset.y) * DDMultiple.y, (transform.localEulerAngles.z + DDOffset.z) * DDMultiple.z); } else { Follow(); } } else { Follow(); } } private void OnEnable() { posZ = transform.position.z; } private void OnDisable() { is3dh = false; transform.position = new Vector3(base.transform.position.x, base.transform.position.y, posZ); transform.localEulerAngles = new Vector3(0, 90, 0); } #endregion // 功能 #region Utility public void On4dof() { transform.position = new Vector3(headsetTransform.position.x, headsetTransform.position.y, 1); transform.localEulerAngles = new Vector3(0, 90, 0); } void Follow() { transform.position = new Vector3(headsetTransform.position.x, headsetTransform.position.y, 1); transform.localEulerAngles = new Vector3(0, 90, 0); } #endregion } }