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

原文地址:https://blog.csdn.net/qq_22626987/article/details/146463049
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/95675.html

相关文章:

  • 知识分享导航
  • Jackson使用ObjectNode对象实现JSON对象数据(一):增、删、改、查
  • 深度学习有哪些算法?
  • 05STM32定时器-01定时器概述
  • AI+金融 应用 使用DeepSeek、Qwen等大模型输入自然语言,得到通达信等行情软件公式代码,导入后使用
  • 01STM32时钟树
  • Spring Boot整合MyBatis
  • Python个人学习笔记(19):模块(正则表达式)
  • 【MySQL】内置函数
  • Linux安装Ollama+MaxKB建立本地知识库
  • 全息教学系统的软件开发,沉浸式数字沙盘展示系统如何改变历史教学
  • LangChain组件Tools/Toolkits详解(6)——特殊类型注解Annotations
  • 风控笔记4——市场风险管理
  • (UI自动化测试web端)第二篇:元素定位的方法_class定位
  • DigitalFoto公司如何用日事清流程管理工具实现任务优先级与状态可视化?
  • Jackson的核心类与API方法:ObjectMapper、JsonNode、ObjectNode、ArrayNode
  • Blender导出fbx到Unity找不到贴图的问题
  • C++面试题总结
  • 【NLP 42、实践 ⑪ 用Bert模型结构实现自回归语言模型的训练】
  • (UI自动化测试web端)第二篇:元素定位的方法_xpath路径定位