Unity中给Animator扩展一个异步等待播放指定clip的方法
前言
给Animator扩展一个可等待的异步PlayAsync("动画名字")方法
await myAnimator.PlayAsync("动画名字")
备注:用到的包UniTask
一、扩展方法的实现
在写的时候,难点在于获取当前播放的clip时长
float len = myAnim.GetCurrentAnimatorClipInfo(0)[0].clip.length;
扩展方法的代码清单
/// <summary>
/// 【功能】:异步扩展方法:等待一个Animator上的clip动画片段播放完毕
/// TODO:正播,倒播
/// </summary>
/// <param name="myAnim">Animator组件</param>
/// <param name="speed">设置播放速度(默认参数)</param>
public static async UniTask PlayAsync(this Animator myAnim, string clipName, CancellationToken ctk, float speed = 1f)
{
//数据验证
if (speed < 0)
{
Debug.LogError($"速度值设置为正数。Play()");
return;
}
//正播
int animationHash = Animator.StringToHash(clipName);
myAnim.speed = speed;
myAnim.Play(animationHash);
await UniTask.DelayFrame(1, cancellationToken:ctk); //delay,初始化
float len = myAnim.GetCurrentAnimatorClipInfo(0)[0].clip.length;//获取当前播放的clip片段的时长(单位:秒)
//等待播完
await UniTask.Delay(TimeSpan.FromSeconds(len + 0.1f),cancellationToken:ctk);
}
二、服用该扩展方法
//按下按钮
//...
//等待机器动画播放
await myAnimator.PlayAsync("动画名字",ctk);
//下一步
//....