中山网站免费制作广告营销公司
前言
给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);//下一步
//....