Unity 动画系列十一 Animator Record 录制与回放
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 动画系列十一 Animator Record 录制与回放相关的知识,希望对你有一定的参考价值。
参考技术A 参考
Unity-Animator深入系列---录制与回放
学习笔记 --- Unity动画系统
Animator自带了简单的动画录制,回放功能。但可惜的是不支持持久化的数据输出。因而不能作为录像保存。不过这种 可以作为竞速,格斗类游戏在结束时经常出现的游戏回放 ,还是比较有用的。
通过Animator Record 我们可以记录角色在一段时间内所执行的所有动作,并在需要时回放这段动作,Animator会记录动作的执行,过渡,动画参数。进行回放时,Animator的动画状态,状态过渡,动画参数值的改变将在回放中复现。
如果是ApplyRootMotion情况下的动作记录与回放,人物会返回原位置并执行录制好的动作,再次复现整套动作,以及动作产生的位移,角位移。非ApplyRootMotion下的动作记录与回放,人物不会被重置位置,而只是复现动作。
进行回放时,任何对Animator状态机的修改操作均无效(无法修改动画参数,无法进行状态切换)。停止回放时,人物会在当前所在的位置停止回放,并返还Animator的操作权。
如果我们使用animator.StartRecording(0),那么recorderStartTime的值会是0,animator.recorderStopTime是所记录的动画时间长度。而使用animator.StartRecording(int frame),那么recorderStartTime/animator.recorderStopTime是最后frame帧对应的游戏时间点。
动画的回放需要我们在使用了animator.StartPlayback();之后,根据recorderStartTime/animator.recorderStopTime,在Upadte中自行修改playbackTime,累加Time.deltaTime来实现。
如果我们需要将animator的播放速度(animator.speed)的改变也记录并实在回放中复现。我们可以通过将速度的数值实时记录在一个动画参数中。当我们进行回放时,由于动画参数的数值会复现,我们可以在播放方法累加Time.deltaTime时与动画参数中获取到的速度数值相乘,从而实现速度改变的记录和回放复现。
同样的思路可以对其他一些需要在回放中复现的属性数值,通过动画参数的记录和引用来实现。
unity Animator 怎么判断一个动画播放结束
参考技术A 第一种方法:在动画结束帧后面加个动画事件,调用下含这个变量的函数接口不是可以了?第二种方法:试试animator上面那个 exit time
第三种方法:
//获取动画层 0 指Base Layer.
AnimatorStateInfo stateinfo = animator.GetCurrentAnimatorStateInfo(0);
//如果正在播放walk动画.
if(stateinfo.IsName("Base Layer.walk"))
以上是关于Unity 动画系列十一 Animator Record 录制与回放的主要内容,如果未能解决你的问题,请参考以下文章