/// --------------------------------------------- /// Ultimate Character Controller /// Copyright (c) Opsive. All Rights Reserved. /// https://www.opsive.com /// --------------------------------------------- namespace Opsive.UltimateCharacterController.Traits { using Opsive.UltimateCharacterController.Game; using UnityEngine; /// /// Updates the Animator component at a fixed delta time. /// [RequireComponent(typeof(Animator))] public class AnimatorUpdate : MonoBehaviour, IKinematicObject { private Animator m_Animator; private int m_KinematicObjectIndex; public int KinematicObjectIndex { set { m_KinematicObjectIndex = value; } } public KinematicObjectManager.UpdateLocation UpdateLocation { get { return m_Animator.updateMode == AnimatorUpdateMode.Fixed ? KinematicObjectManager.UpdateLocation.FixedUpdate : KinematicObjectManager.UpdateLocation.Update; } } /// /// Cache the componetn references. /// private void Awake() { m_Animator = GetComponent(); m_Animator.enabled = false; } /// /// Registers the object with the KinematicObjectManager. /// private void OnEnable() { m_KinematicObjectIndex = KinematicObjectManager.RegisterKinematicObject(this); } /// /// Updates the Animator at a fixed delta time. /// public void Move() { m_Animator.Update(Time.fixedDeltaTime); } /// /// Unregisters the object with the KinematicObjectManager. /// private void OnDisable() { KinematicObjectManager.UnregisterKinematicObject(m_KinematicObjectIndex); } } }