主要代码逻辑是创建一个action队列,当动画播放结束时就移除队头,执行后面的事件
public class Enemy : MonoBehaviour
{
public event Action E_AnimatorFin;//当动画播放完毕时
public Action DefaultAction;//默认事件
public Dictionary<Action, string> EventAnimator= new();//Event对应的动画
public List<Action> Eventlist=new();//要做的event列表
private Animator ani;
public virtual void Start()
{
ani = GetComponent<Animator>();
E_AnimatorFin += OnAnimatorFinish;
StartCoroutine(SpawningAnimator());
IEnumerator SpawningAnimator()
{
yield return new WaitForSeconds(0.02f);
PlayAnimator(ani, EventAnimator[ Eventlist[0]],
() =>
{
Debug.Log("动画播放前执行代码"+ EventAnimator[ Eventlist[0]]);
},
() =>
{
E_AnimatorFin?.Invoke();
Debug.Log("动画播放完执行代码");
});
}
}
public virtual void OnAnimatorFinish()
{
StartCoroutine(spawnanimator());
IEnumerator spawnanimator()
{
yield return new WaitForSeconds(0.02f);
if (Eventlist.Count == 0)
{
Eventlist.Add(DefaultAction);
Debug.LogWarning(name+$"并没有新的事件,目前在执行默认的事件");
}
try
{
PlayAnimator(ani, EventAnimator[ Eventlist[0]],
() =>
{

这篇博客探讨了在Unity中如何构建一个动画行为系统,通过创建一个action队列来管理动画事件。当动画播放完毕,系统会自动移除队列头部的事件并触发后续操作。文中提供了具体的使用示例。
最低0.47元/天 解锁文章
1176

被折叠的 条评论
为什么被折叠?



