using UnityEngine; namespace Unity.Cinemachine.Samples { /// /// Orients the GameObject that this script is attached in such a way that it always faces the Target. /// [ExecuteAlways] public class LookAtTarget : MonoBehaviour { [Tooltip("Target to look at.")] public Transform Target; [Tooltip("Lock rotation along the x axis to the initial value.")] public bool LockRotationX; [Tooltip("Lock rotation along the y axis to the initial value.")] public bool LockRotationY; [Tooltip("Lock rotation along the z axis to the initial value.")] public bool LockRotationZ; Vector3 m_Rotation; void OnEnable() { m_Rotation = transform.rotation.eulerAngles; } void Reset() { m_Rotation = transform.rotation.eulerAngles; } void Update() { if (Target != null) { var direction = Target.position - transform.position; transform.rotation = Quaternion.LookRotation(direction); if (LockRotationX || LockRotationY || LockRotationZ) { var euler = transform.rotation.eulerAngles; euler.x = LockRotationX ? m_Rotation.x : euler.x; euler.y = LockRotationY ? m_Rotation.y : euler.y; euler.z = LockRotationZ ? m_Rotation.z : euler.z; transform.rotation = Quaternion.Euler(euler); } } } } }