using UnityEngine; using System.Collections; namespace MoreMountains.Tools { /// /// Use this class to offset an animation by a random range /// [RequireComponent(typeof(Animator))] [AddComponentMenu("More Mountains/Tools/Animation/MMOffsetAnimation")] public class MMOffsetAnimation : MonoBehaviour { /// the minimum amount (in seconds) by which to offset the animation public float MinimumRandomRange = 0f; /// the maximum amount (in seconds) by which to offset the animation public float MaximumRandomRange = 1f; /// the layer to affect public int AnimationLayerID = 0; /// whether or not to apply that offset on Start public bool OffsetOnStart = true; /// whether or not to self disable after offsetting public bool DisableAfterOffset = true; protected Animator _animator; protected AnimatorStateInfo _stateInfo; /// /// On awake we store our animator /// protected virtual void Awake() { _animator = this.gameObject.GetComponent(); } /// /// On Start we offset our animation /// protected virtual void Start() { OffsetCurrentAnimation(); } /// /// offsets the target animation /// public virtual void OffsetCurrentAnimation() { if (!OffsetOnStart) { return; } _stateInfo = _animator.GetCurrentAnimatorStateInfo(AnimationLayerID); _animator.Play(_stateInfo.fullPathHash, -1, Random.Range(MinimumRandomRange, MaximumRandomRange)); if (DisableAfterOffset) { this.enabled = false; } } } }