【Unity】animator检测某state动画播放完毕方法
博主对动画系统很不熟,可能使用的方法比较曲折,但是我确实没找到更有效的方法了。
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;// 设置动画播放完毕
}
}
添加事件