等等,我改变主意了"--状态机转换中断

因此,让我们深入了解状态机转换和中断的一些复杂细节!
在动画系统的默认情况下,转换是不能被打断的:一旦你开始从一个状态进入另一个状态,就没有退路了。就像乘坐跨大西洋航班的乘客一样,在到达目的地之前,你一直惬意地窝在座位上,无法改变主意。对于大多数用户来说,这样就可以了。
但是,如果您需要对转场进行更多控制,Mecanim 可以通过各种方式进行配置,以满足您的需求。如果您对当前的目的地不满意,您可以跳上飞行员的座位,在飞行中途改变计划。这意味着更多的响应动画,但也有很多机会让人迷失在复杂的动画中。
因此,让我们通过几个例子来理清这个问题。我们可以从一个相当简单的状态机开始,它有四个状态,分别标为 A 到 D,状态机上的每个转换都有触发器。

默认情况下,当我们触发 A->B 转换时,我们的状态机就会向 B 转换,没有什么能阻止它到达目的地。但是,如果我们使用 A->B 过渡检查器,并将中断源从 "无 "改为 "当前状态",我们从 A 到 B 的旅程就会被状态 A 上的某些 触发器中断。

为什么只有 "一些"?因为 "有序中断 "复选框也是默认选中的。这意味着只允许状态 A 上优先级高于当前状态的转场。观察状态 A 的检测器,我们可以发现这只适用于 A->C 的转换。

因此,如果我们激活了 A->B 触发器,那么在 A->D 触发器之后不久,我们的转换就不会中断。但是,如果我们按下 A->C 触发器,则过渡立即中断,状态机开始向 C 过渡。
在内部,动画系统会记录中断时的姿势,现在将在静态姿势 (X) 和新的目标动画之间进行混合。为什么是一个静态的姿势,而不是在当前过渡和新过渡之间进行可能更平滑的融合?简而言之:性能。当游戏面临一连串的中断时,如果要同时跟踪多个动态转换,很快就会导致动画系统无法扩展。
现在,如果我们取消选中 "有序中断 "复选框,那么 A->C 和 A->D 都可以中断转换。但是,如果它们都在同一帧触发,A->C 仍将优先,因为它的优先级更高。
如果我们将中断源改为 "下一状态",那么 A->C 和 A->D 就不能再中断转换,无论它们的顺序如何。但是,如果我们按下 B->D 触发器,就会立即开始从 A 过渡到 D,而不会完成向 B 的过渡。
状态 B 的转换顺序也很重要。有序中断 "复选框不再可用(B 上任何被触发的转换都可以中断该转换,因为它们相对于 A->B 没有优先级排序),但如果两个转换在同一帧内被触发,B 上的转换顺序将决定哪个转换获胜。在这种情况下,如果 B->D 和 B->C 在同一帧中触发,则会选择 B->D。

最后,为了实现完全控制,我们可以将中断源设置为 "当前状态然后下一状态 "或 "下一状态然后当前状态"。在这种情况下,将先独立分析一个状态的转换,然后再分析另一个状态的转换。
因此,假设我们有以下配置。

在 A->B 的转换过程中,一个非常兴奋的玩家会在同一帧内触发四次转换:A->C、A->D、B->C 和 B->D。会发生什么?
首先,"有序中断 "被选中,因此我们可以立即忽略 A->D:它的优先级低于 A->B。当前状态首先得到解决,因此我们甚至不用看状态 B 就能知道 A->C 过渡获胜。

