当前位置: 首页 > news >正文

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);

//下一步
//....

相关文章:

  • QFlightInstruments飞行仪表控件库
  • 快速幂算法
  • 【Qt】文件与音视频
  • 【C++】map
  • 华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架实现PWCNet光流估计
  • 梓航建站CMS独立版最新v1.9.4全插件PC+H5
  • 表格结构数据
  • 3.29:数据结构-绪论线性表-上
  • 类与对象(下)
  • 智能指针/内存泄露/类型转换
  • BeanDefinition和Beanfactory实现一个简单的bean容器
  • Prompt Flow 与 DSPy:大型语言模型开发的未来
  • 【论文阅读】LongDiff:Training-Free Long Video Generation in One Go
  • 全流程AI论文辅助系统开发实战:从构思到文献增值的智能进化
  • 测试开发-定制化测试数据生成(Python+jmeter+Faker)
  • 动态规划(DP)
  • 聚类(Clustering)基础知识2
  • Web开发-JS应用WebPack构建打包Mode映射DevTool源码泄漏识别还原
  • Linux内核perf性能分析工具案例分析
  • 聚类(Clustering)基础知识3