当前位置: 首页 > 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方法

相关文章:

  • 【吾爱出品】【阿修】兔子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道经典面试题】(中英对照)
  • 美财长称关税战升级的责任在中方,外交部:关税战、贸易战没有赢家
  • 暗蓝评《性别打结》丨拆解性别之结需要几步?
  • 今年一季度全国社会物流总额达91万亿元,工业品比重超八成
  • 来伊份一季度净利减少近八成,今年集中精力帮助加盟商成功
  • 十四届全国人大常委会第十五次会议继续审议民营经济促进法草案
  • 上海出台灵活就业人员公积金新政:不限户籍、提取自由,6月起施行