博主對動畫系統很不熟,可能使用的方法比較曲折,但是我確實沒找到更有效的方法了。
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;// 設置動畫播放完畢}}
添加事件