Animator- Interruption Source用法

『技巧 | 经验』 版权:禁止匿名转载;禁止商业使用。

1031 0 0 2019-04-16 举报

CG素材

未设置职业





通常情况下,动画状态机(State Machine) 在 动画过渡(Transition) 时是无法被打断的,一旦你开始从一个 动画节点(State) 过渡到另一个 State 时,你无法中断这种行为。就好比一个乘客乘坐在一部已经离开地面的飞机上,你能做的只是好好享受这次旅途直到抵达终点,你却无法改变这次飞行航线。在大多数情况下,都是如此。


但是,如果你需要对动画过渡拥有更多的控制权,unity 的 State Machine 给你提供了一些方法来实现。当你的飞机已经起飞,你对旅途的终点并不满意,你可以选择坐在飞行员的位置中途改变航线。这意味着State 与 State之间有更多的可能性,同样的,也增加了State Machine 的复杂性。


首先,让我们看几个简单的例子,先从一个简单的State Machine开始,它拥有4个 State,分别是 A, B, C, D 以及相对应的 触发行为(Triggers) 连结状态机上的每个State(每一个箭头代表一种Transition,对应一种触发行为)。






添加一些动画状态以及一些动画过渡
一般情况下,当我们从State A 向 State B (A->B) 进行 Transition 时,我们的动画状态机State Machine 在这个过渡过程中是不会发生任何改变的,直到它抵达到State B。但是如果我们选中这个过渡线段(A与B之间的白色箭头线段),我们可以从检视面板中看到有一个 Interruption Source 的选项,我们将其状态从 None 改成 Current State,此时这个过渡动作才会被“某些”在触发行为打断(如下图):





动画过渡的检视面板
为什么说是某些?因其下方的 Ordered Interruption 单选框为勾选状态,这个选项意味着只有在当前State(State A)上拥有更高优先级的 Transition 才可以打断 A->B 这个过渡动作。(如下图):

除了本身A->B之外,A->C的优先级要高于 A->D,





A 动画状态节点上的过渡动作及其优先级
那么,即使我们触发了A ->B的 Transition,又立刻去触发 A->D的过渡动作,我们的整个过程是不会被打断的。然而,当我们触发的不是 A->D 而是 A->C,则 State Machine 会立刻打断A->B 的Transition, 执行 A->C 的 Transition。


而在动画系统内部,它会记住被打断的位置(X),并且将该位置(X)的动画与新Transition(A->C)终点(C)的动画进行融合过渡,如下图(X->C)。





被打断点X到C动作融合
在一个游戏中,经常会遇到动作被打断的情况,动画机便会快速的在这些被打断出与新的Transition 终点进行模拟融合以至于整个State Machine看起来更流畅。


如果我们不勾选 Ordered Interruption 单选框,那么情况会变得更加简单, A->C 和 A->D 都可以打断A->B这个Transition。当然,如果 A->C 和 A->D 的 Transition 同时被触发,那么 A->C 会成为打断者,因为它在Current State (State A)上拥有更高的优先级。


如果我们将 Interruption Source 改成 Next State, 那么 A->C 和 A->D 将无法打断这个过渡。但是,此时当我们在 A->B 过程中去触发 B->D,State Machine 将会立刻开始 A->D 的过渡,并且整个过程不需要完成 A->B 的Transition。


这种过渡模式同样适用于State B到其他的State,当然,同样的,B->D和B->C的过渡同时发生,那么优先采用优先级更高的(B->D)如下图,即发生A->D的过渡。





B 动画状态节点上的过渡动作及其优先级
最后,我们可以通过设置 Interruption Source 成 Current State Then Next State 或者 Next State Then Current State 来决定哪个动画State上的过渡节点优先权更高,前者表示先看当前State的优先级如果没有被触发,再看下一个State的优先级,后者则相反,来达到不同的融合与打断效果。


大家如果有不太清楚的地方,也可以自己新建一个工程,新建一个Animator以及一些Clip来测试效果。


以上便是StateMachine中Interruption Source的主要用法,希望对大家有帮助,大家也可以进行一些测试,如果有翻译的不恰当的,可以留言交流,谢谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

让资源更有价值

  • Archiver|
  • 手机版|
  • 小黑屋|
  • CG素材网
  • 蜀ICP备18003526号-3
  • Powered by Discuz! X3.4
  • © 2001-2017 Comsenz Inc.
  • GMT+8, 2024-5-3 20:01 , Processed in 0.300508 second(s), 34 queries .

 关注CG资源素材

快速回复 返回顶部 返回列表