有没有大神知道为啥unity中使用animator实现动画倒放时为啥会有延迟?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有大神知道为啥unity中使用animator实现动画倒放时为啥会有延迟?相关的知识,希望对你有一定的参考价值。

参考技术A 过渡条件的 Has Exit Time 去勾

Unity - Animator组件

Animator组件

Animator 是 Unity 中动画控制器的组件,相当于一个动画片段管理器。

我们知道在 Unity 中素材可以拖拽到游戏对象上,制作成称为 Clip 的动画片段,

如果该对象上没有 Animator 组件,那么也会同时创建 Animator 用来管理 Clip 的切换和触发等操作。

角色的多向动画

当控制一个2D角色(或3D角色)时,需要四个方向的移动动画,还需要四个方向的攻击动画。

之前想的可能是:制作8个 State,分别处理8段动画,然后在脚本代码中来回切换,就会出现密密麻麻的 State Transition

而 Blend Tree 可以很好的解决这个问题。

Blend Tree(混合树) 用于允许通过按不同程度组合所有动画的各个部分来平滑混合多个动画。

在一个 State 上创建一个新的 Blend Tree,然后双击进入。在 Animator 的参数面板中添加两个 float 变量x和z。

在 Inspector 面板中选择 Blend Type 2D simple directional,选择参考变量。

这时下面会出现一个 Motion 数组,在里面分别设置图中四个点的坐标和四个动画片段。

技术图片

 变量x和z用来表示角色的朝向,我们会在代码中进行设置。

Blend Tree 的神奇之处就在于,它能够根据你所设定的不同值的组合,去寻找相对应的 Motion

技术图片

 检测动画的播放状态

制作一个死亡动画不是问题,但是死亡之后如何判定动画是否播放完毕,然后进行处理?

比如现在要求死亡动画播放完之后,角色保持在死亡的那一帧,禁止播放其他动画。

首先是 Add Animation Event(添加动画事件):

在 Animation 面板,选择需要监听的动画片段,选中触发的关键帧,

右键添加动画事件,然后选择所需要触发的函数就可以了。

技术图片

这样动画播放到这一帧的时候,就会触发所选择的函数了。

然后就是 State Machine Behavior

选中一个 State 之后,在 Inspector 面板中点击 Add Behavior 添加一个状态机脚本。

技术图片

进入脚本,这里面最常用的三个函数分别是 EnterUpdateExit 函数。

分别是进入状态、更新状态和退出状态的时候会调用的函数。

在死亡状态后面新建一个状态,设置死亡动画播放完以后 Exit time 形式进入这个状态。

在刚添加的脚本中添加代码:

1     override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
2     {
3         animator.enabled = false;
4     }

这样角色死亡动画播放完以后,会自动切换到一个空状态,切入之前会调用这个Exit函数,将动画控制器禁用。

以上是关于有没有大神知道为啥unity中使用animator实现动画倒放时为啥会有延迟?的主要内容,如果未能解决你的问题,请参考以下文章

unity 3d中,Animation clip播放到第一个Animation Event事件就停了下来,为啥?

unity3d动画animator为啥不动了,不反回呢

Unity Animation扩展方法总结

Unity - Animator组件

Unity - Animator组件

unity 3d 5.0 给一个柜子加了自定义的Animation,没反应,请问为啥?