【问题记录】Unity动画片段Animation的Events帧事件没有调用

问题:

监听角色翻滚闪避动画,闪避结束后切换到下一状态,在翻滚Animation的末尾添加的Event帧事件,运行过程中没有成功调用

原因:

在Animator中动画切换时勾选了HasExitTime,切换时会有动画过度时间,两段动画进行融合,如果帧事件是添加在过度时间段内,某些情况下不能成功调用

      

解决:

一、可以取消勾选HasExitTime,取消后不会融合两段动画,上一段动画会完整播放,不会漏掉帧事件;这样会导致两段动画切换的比较突兀。

二、如果可以,将帧事件移动到融合之前;不过这样帧事件的调用时间会有一些偏差。

三、将融合时间设置为0(与取消勾选HasExitTime效果相似),或者将融合时间后移到下个动画内(如果下个动画的融合部分没有帧事件)。

      

四、不使用帧事件监听动画片段结束,直接在代码内判断 。

Unity中,可以通过以下步骤来侦听动画事件: 1. 首先,确保你的动画包含了需要侦听的事件。在Unity动画编辑器中,选中你的动画片,在Inspector面板中,展开"Events"部分。 2. 在"Events"部分,你可以添加和编辑动画事件。点击"Add Event"按钮来添加一个新的事件。 3. 每个事件包含一个名称和一个时间点。你可以在动画播放到指定时间点时触发事件。 4. 在你的代码中,你可以通过动画组件来侦听动画事件。获取到动画组件的引用后,可以使用`AnimationEvent`类来注册事件回调函数。 以下是一个示例代码,演示如何侦听动画事件: ```csharp using UnityEngine; public class AnimationEventListener : MonoBehaviour { public Animation animation; private void Start() { // 获取到动画组件的引用 animation = GetComponent<Animation>(); } private void OnEnable() { // 注册动画事件回调函数 animation.AnimationEvent += OnAnimationEvent; } private void OnDisable() { // 取消注册动画事件回调函数 animation.AnimationEvent -= OnAnimationEvent; } private void OnAnimationEvent(AnimationEvent animationEvent) { // 在这里处理动画事件 Debug.Log("Received animation event: " + animationEvent.stringParameter); } } ``` 在上述示例中,我们首先获取到动画组件的引用,然后在`OnEnable`方法中注册事件回调函数,`OnDisable`方法中取消注册。当动画事件触发时,会调用`OnAnimationEvent`方法来处理事件。 记得将上述代码附加到包含动画的游戏对象上,并设置正确的动画组件引用。这样,你就可以侦听和处理动画事件了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧然CS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值