unity animator循环播放判断当前动画是否播放完毕

本文介绍了在Unity中使用Animator组件进行动画状态判断与控制的方法。通过使用GetCurrentAnimatorStateInfo和normalizedTime属性,确保动画正确播放并过渡。文章提供了具体的代码实现,包括使用IEnumerator进行动画播放的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录下,直接上代码

主要俩个api 

animator.GetCurrentAnimatorStateInfo(0).IsName("name");

animator.GetCurrentAnimatorStateInfo(0).normalizedTime<1.0f

 

需要注意的是 动画如果直接判断是否是当前动画,会出现false的情况,因此需要进行携程进行判断一下

    /// <summary>
    /// 播放动画
    /// </summary>
    public void PlayAnimator()
    {
        animator.Play("clear");

        StartCoroutine(enumerator());
    }

    IEnumerator enumerator()
    {
        yield return new WaitForSeconds(0.3f);
        if (animator.GetCurrentAnimatorStateInfo(0).IsName("clear"))
        {
            Debug.Log("播放clear");
            while (animator.GetCurrentAnimatorStateInfo(0).normalizedTime<1.0f)
            {
                yield return null;
            }
            Debug.Log("播放完毕");
            animator.Play("temp");
            animator.Update(0);
        }
    }

 

### Unity 中检测动画播放完成的方法 在 Unity 中,可以通过多种方式来检测动画是否已经播放完毕。以下是几种常用方法: #### 使用 AnimationEvent 可以在动画的最后一帧设置 `AnimationEvent` 来触发回调函数。这允许脚本接收到通知并执行特定操作。 ```csharp void OnAnimComplete() { Debug.Log("动画已完成"); } ``` 当动画到达最后一帧时会调用此函数[^1]。 #### 利用 Animator 的事件监听器 通过编写自定义类继承 MonoBehaviour 并实现 IStateMachineBehaviour 接口可以更灵活地控制状态变化逻辑。具体来说,在 Exit 函数里判断当前状态是否为目标状态即可得知动画结束时刻。 ```csharp public class MyAnimatorListener : StateMachineBehaviour { override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){ if (stateInfo.IsName("目标状态名称")) { Debug.Log("指定的动画已结束"); } } } ``` 这种方法适用于复杂的多层混合树结构下的精确监控需求[^2]。 #### 查询 Animator 的属性 还可以直接查询 Animator 组件的相关属性来进行简单判定。比如利用 normalizedTime 属性值接近于 1 表明该片段即将循环或停止;isPlaying 字段则用于确认此刻是否有任何正在运行中的剪辑实例存在。 ```csharp if (!animator.GetCurrentAnimatorStateInfo(0).IsName("Idle") && Mathf.Approximately(animator.GetCurrentAnimatorStateInfo(0).normalizedTime % 1, 1)) { Debug.Log("非空闲状态下的一次完整播送周期结束了!"); } else if(!animator.isPlaying){ Debug.Log("所有活动都暂停/终止了."); } ``` 以上三种方案各有优劣之处,开发者应根据实际项目情况选择最适合自己的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值