欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > Unity Animation的其中一种运用方式

Unity Animation的其中一种运用方式

2025/3/31 9:18:06 来源:https://blog.csdn.net/qq_22626987/article/details/146463049  浏览:    关键词: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方法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词