Unity中给Animator扩展一个异步等待播放指定clip的方法

前言

给Animator扩展一个可等待的异步PlayAsync("动画名字")方法

await myAnimator.PlayAsync("动画名字")

备注:用到的包UniTask

一、扩展方法的实现

在写的时候,难点在于获取当前播放的clip时长

float len = myAnim.GetCurrentAnimatorClipInfo(0)[0].clip.length;

扩展方法的代码清单

        /// 
        /// 【功能】:异步扩展方法:等待一个Animator上的clip动画片段播放完毕
        /// TODO:正播,倒播
        /// 
        /// Animator组件
        /// 设置播放速度(默认参数)
        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);

//下一步
//....

你可能感兴趣的:(unity,游戏引擎,异步方法)