Unity 学习丨 暂停动画获取当前帧的信息

系统环境:Windows 10
Unity 版本:2019.4.0f1 Personal

问题描述

最近初学 Unity,期望能复刻游戏「分手骰子」,游戏中有个场景是这样的:骰子滚动,触屏交互停止滚动并记录点数。

今天做到这部分,发现记录骰子点数需要获取动画停止时当前的帧数,学习了相关 API 的使用,最终效果如下:


完成后的骰子滚动和计数效果(使用 gifcam 录制)

解决

主要使用了 GetCurrentAnimatorStateInfo() 方法和 normalizedTime 属性。

GetCurrentAnimatorStateInfo() 方法获取当前状态的动画片段(Clip),返回类型为 AnimatorStateInfo
AnimatorStateInfo 官方文档
调用 AnimatorStateInfo 类型变量的 normalizedTime 属性记录了当前状态的归一化时间,这是一个 float 类型的值,整数部分为目前已经经历的循环(loop)周期数,小数部分为未满一次循环的部分占一次循环的时间比例。
normalizedTime 官方文档

normalizedTime 官方文档说明

骰子动画一共有 6 个关键帧,只需要取归一化时间的小数部分乘六向上取整即得到点数值。
如果需要获取具体帧数,需要用到 GetCurrentClipInfo() 方法获取动画片段 ClipInfo(结果是一个数组,需从中索引自己需要的片段),访问 .clip.frameRate 属性获取帧率,再计算得出。

其他

AnimatorStateInfo 类型还有其他一些非常有用的属性,记录 3 个比较简单的:

属性 类型 意义
length float 当前的状态持续的时间(由动画长度决定)
loop bool 当前的状态是否循环播放
speed float 播放速度,1 为常速

参考

  1. https://blog.csdn.net/qq_27677895/article/details/105655645
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容