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

Unity Animation的其中一种运用方式

Animation是Unity的旧的动画系统,先说目的,其使用是为了在UI中播放动效,并且在动效播放结束后接自定义事件而设计的
在这里插入图片描述
在这里插入图片描述

设计的关键点在于,这个脚本不是通过Animation直接播放动画片段,而是通过修改AnimationState的normalizedTime,并且调用Animation.Sample方法来直接应用动画状态到具体时间点,然后再通过时间判断是否播放结束,如果播放结束,那么调用onComplete回调

- 具体分析

在这里插入图片描述
在决定播放动画时,先调用Stop方法,停止所有动画,然后重置_progressTime,再调用Play方法,让动画从头开始播放,这里的Play和Stop的区别在于,Play相当于将动画片段的normalizedTime变为0,然后调用Sample方法,即立刻将动画片段重置到初始状态,而Stop则是在此时停止动画片段,并不会重置到初始状态
然后初始化_lastFrameTime,isPlaying状态为true

在这里插入图片描述
先判断是否在播放状态,然后获取当前播放的动画片段,再获取_currentTime,这里_lastFrameTime和_currentTime全部是使用的Time.unscaledTime,因为这个是不受时间缩放影响的时间,即获取的是游戏世界中真实的时间,然后计算两帧之间的差值,即帧之间的时间间隔,通过这个时间间隔,乘动画片段的播放速度,累加得到动画的播放进度_progressTime。
然后判断是否设置为Loop模式,如果是,就通过取模操作计算normalizedTime,否则直接计算已经播放的百分比,然后通过Sample直接应用对应时间点的动画状态。
最后,判断进度是否达到或超过总长度,如果是的话,且不是Loop模式,则调用onComplete回调,同时将isPlaying置为false
通过这种设计,能够在具体的时间点插入回调,在Update中自定义更新动画片段的状态,其核心就是调整动画的normalizedTime以及应用Sample方法

http://www.dtcms.com/a/85564.html

相关文章:

  • 【吾爱出品】【阿修】兔子vCard editor by(通讯录编辑工具)
  • 【RH124】 第五章 创建、查看文本文件
  • Android Launcher3 HotSeat文件夹创建禁止方案全解析
  • WordPress二次开发中常用到的一些变量和函数
  • 算法刷题整理合集(六)
  • 如何提升需求管理能力
  • 编辑距离算法的正确性证明
  • 计算机网络-2 物理层
  • 01_JavaScript
  • WMS WCS系统架构
  • 二叉树_二叉搜索树中的众数
  • 重生之我是八位数码管糕手
  • 使用__attribute__((at(addr))) 固定变量到指定 Flash 地址
  • 架构思维:从CAP到PACELC到BASE
  • :ref 和 this.$refs 的区别及 $ 的作用
  • 机器学习在自然语言处理中的应用与实践
  • c++高精度减法
  • @maptalks/gl-layers中的VectorTileLayer的Symbol样式文档
  • 对该Django ORM查询的改进方案及详细说明
  • 表达式树和编译原理【10道经典面试题】(中英对照)
  • 机器人前沿技术的发展与展望
  • 《Manus学习手册》.pdf(文末附完整版下载地址)
  • 二叉树的前,中,后序遍历
  • 前端 -- 计算机图形学基础:光与三角形面(Mesh)求交
  • 系统转换、系统维护、净室软件工程、构件软件工程(高软51)
  • 【C++教程】bool类型
  • Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现
  • 【算法day19】括号生成——数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
  • MySQL中怎么分析性能?
  • ollama 设置环境变量OLLAMA_HOST允许外部访问