|
|
|
|
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<Animator>();
|
|
|
|
|
baker = GetComponent<Baker>();
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|