博主对动画系统很不熟,可能使用的方法比较曲折,但是我确实没找到更有效的方法了。

unity的这个animator在我看来简直有毛病啊,为什么那么难以获取某状态动画的信息呢???

想要知道动画播完没有只有用normalizedTime>1f,我们来看看gpt给的normalizedTime的定义

unity官方文档写的定义

我天真的觉得只要不勾选animation clip的loop time,就可以正常检测完播了,完全不行哈(如果只需要检测一次完播可以用这个)

我测试得出的结论是,animator会一直计数这个状态的播放时长(即使是从该状态转移到另一状态再转移回来),整数部分表循环次数,小数部分表播放百分比,但是它不是绝对精准的,至少在我2022的unity版本里不精准。因此放弃使用normalizedTime来检测完播

解决方案:

建立一个新的脚本 AnimationEventHandler挂载在animator所在物体上,再给要检测完播的animation clip里添加事件(add event),调用AnimationEventHandler里的方法(必须是public)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimationEventHandler : MonoBehaviour
{
    // 挂在有animator的物体上
    [HideInInspector]public bool isAnimationEnd = false;// 动画是否播放完毕
    public void OnAnimationEnd()
    {
        Debug.Log("动画播放完毕!");
        isAnimationEnd = true;// 设置动画播放完毕
    }

}

添加事件

Logo

分享最新的 NVIDIA AI Software 资源以及活动/会议信息,精选收录AI相关技术内容,欢迎大家加入社区并参与讨论。

更多推荐