using System.Collections; using System.Collections.Generic; using UnityEngine; namespace RootMotion { public class AnimationModifierStack : MonoBehaviour { public AnimationModifier[] modifiers = new AnimationModifier[0]; private Animator animator; private Baker baker; private void Start() { animator = GetComponent(); baker = GetComponent(); baker.OnStartClip += OnBakerStartClip; baker.OnUpdateClip += OnBakerUpdateClip; foreach (AnimationModifier m in modifiers) { m.OnInitiate(baker, animator); } } private void OnBakerStartClip(AnimationClip clip, float normalizedTime) { foreach (AnimationModifier m in modifiers) { m.OnStartClip(clip); } } private void OnBakerUpdateClip(AnimationClip clip, float normalizedTime) { foreach (AnimationModifier m in modifiers) { if (!m.enabled) continue; m.OnBakerUpdate(normalizedTime); } } private void LateUpdate() { if (!animator.enabled && !baker.isBaking) return; if (baker.isBaking && baker.mode == Baker.Mode.AnimationClips) return; if (animator.runtimeAnimatorController == null) return; AnimatorStateInfo info = animator.GetCurrentAnimatorStateInfo(0); float n = info.normalizedTime; foreach (AnimationModifier m in modifiers) { if (!m.enabled) continue; m.OnBakerUpdate(n); } } } }