Unity中Animator播放动画结束监听实现

阅读: 评论:0

Unity中Animator播放动画结束监听实现

Unity中Animator播放动画结束监听实现

本文分享Unity中Animator播放动画结束监听实现

今天要分享的是一个在项目中会经常用到, 但是却没有一个统一实现的问题.

我们在Unity的开发中经常会用到动画, 即使用Animator, 但是Unity却没有给我们提供动画结束的回调方法.

通常情况下, 在一些比较简单的项目中, 我们会在动画帧中添加结束事件来达到我们的目的. 这也是Unity官方推荐的方式.

但是在一些大型项目中, 我们很难对所有的动画都添加结束事件, 所以最好能使用代码来完成.

很多同学都会遇到这种困扰, 作者也曾经查询过大量的资料和网站, 做过各种尝试.

下面就给大家大概介绍下一些常用的方式.

通过手动添加结束事件来实现

新建一个Animaton, 选择需要添加事件的帧, 点击添加事件, 输入事件回调方法. 如下:


然后在使用该动画的脚本中实现对应的回调方法即可达到目的.

这种方式在大部分小型项目中都可以正常使用, 只是使用较为繁琐.

通过状态机状态的变化来实现

Unity的动画是基于状态机的, 所以我们可以通过状态的切换来间接获得动画的结束.

但是状态机的变化只能在Editor模式下监听到, 所以这种方式一般不使用, 有兴趣的同学可以自行研究.

通过延时来实现

通过查询动画片段的执行时间, 用一个定时器来做回调. 下面是代码:

public int PlayEffect(string stateName, Action callback = null)
{var animator = GetComponent<Animator>();animator.Update(0f);animator.Play(stateName, -1);if (callback == null) return 0;StartCoroutine(DelayRunEffectCallback(animator, stateName, callback));return 0;
}public IEnumerator DelayRunEffectCallback(Animator animator, string stateName, Action callback)
{// 状态机的切换发生在帧的结尾yield return new WaitForEndOfFrame();var info = animator.GetCurrentAnimatorStateInfo(0);if (!info.IsName(stateName)) yield return null;yield return new WaitForSeconds(info.length);callback();
}

本文发布于:2024-01-28 05:37:41,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063914645178.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:结束   动画   Unity   Animator
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23