您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 中断机制 >

「翻译」Unity 动画状态机的转换中断机制

发布时间:2019-07-05 03:54 来源:未知 编辑:admin

  我最近调查了一个用户诡异的BUG报告,其中涉及了空状态、覆盖层级、转换中断。在深入探究后,我发现我们关于动画系统中转换中断的文档有一些……极简主义。经过与团队的长时间讨论之后,我们总结出了这篇博客。

  默认的情况下,动画系统的转换是不可中断的:当你开始从一个状况转换到另一个状态,是没有其他出路的。就像跨大西洋航班的乘客一样,在到达了你的目的地之前,你只能待在位置上。对于大多数使用者,这是OK的。

  但是如果你对转换有更多控制需求,可以通过各种方式配置Mecanim,以满足这些需求。如果你对当前航班的目的地不满意,你可以在中途改变它。也就是说,这将是一个更灵活的动画,但使用者会很有可能搞不清这些复杂的机制。

  那么让我们通过一些简单的例子来搞懂它吧。我们先建立一个简单的状态机,其中有A B C D四个状态,同时将触发器挂载到每个转换上。

  在默认情况下,当我们触发了A-B的转换时,我们的状态机开始向转向B,而且没有什么可以阻止它到达目的地。但是如果我们去A-B的转换面板上修改Interruption Source(中断源) None - Current State,从A到B的转换可以被A上的一些触发器中断。

  为什么是「一些」?因为Ordered Interruption(有序中断)是被默认勾选的。也就是说,只有A上有更高优先级的转换是生效的。在A状态的面板上,我们可以看到只有A-C的转换是生效的。

  所以,如果我们激活了A-B的触发器,然后触发A-D的触发器,我们的转换依然不会被中断。然而,如果我们触发A-C的触发器,当前的转换会立即被中断,同时状态机开始向C转换。

  这个机制内部,动画系统记录了中断时的pose数据,并使用这个静态的pose数据与新的目标动画进行混合。

  为什么是静态pose数据,而不是在当前和新的转换之间可能更平滑的融合? 简单地说:性能。 当游戏面临一连串的中断时,跟踪同时发生的几个动态转换将迅速使动画系统不可扩展。

  如果我们取消Ordered Interruption(有序中断)的勾选, A-C 和 A-D都可以中断 A-B 的转换。尽管如此,如果它们都在同一帧被触发,依然是A-C优先,因为它有更高的优先级。

  如果我们将Interruption Source(中断源) 改为Next State,A-C 和 A-D 将不再中断转换,无论她们的优先级。尽管如此,如果我们触发了B-D 的触发器,在完成向B的转换之前,状态机将会立即开始A-D的转换。

  转换的优先情况也在B上。Ordered Interruption(有序中断)不再生效(触发任何B上的任何转换条件都可以撞断转换,因为它们相对A-B没有优先级),但是如果多个转换条件在同一帧被触发,依然由在B上的优先级决定哪个生效。例如:如果 B-D 和 B-C 在同一帧被触发,B-D 将会生效。

  在相同的配置下,如果在同一帧只触发了B-C B-D,那么B-D将会生效,因为它有着更高的优先级。

  所有如果我们使A-C可以在Next State中被中断,那么我们让A-C中断A-B,在其转换过程中同样有可能被C-D中断。

  一个非常重要的事情需要被记得:无论中断是否发生,在转换完成之前,源状态是不会改变的。所以 Animator.GetCurrentAnimatorStateInfo()将一直返回源状态。

  简而言之,转换中断机制是一个强大且灵活的,但也能很快变得非常复杂。所以明智地使用转换中断,当有疑问时,在编辑器中测试它。

  小时候, 二月的柳枝发了新绿, 就会剪下一段柳条, 插在家中好看的瓶子里, 欣赏它的曼妙。 三月的桃花杏花吐了蕾, 剪下一簇拥于瓶中, 每天换水等待它怒放芽孢。 五月过后, 庭前的花竞相怒放的时候, 我扔会剪下几枝, 插在瓶中 放在桌上, 尽情的嗅着花香, 快乐的,无忧的...

  1,团结能人做大事,团结庸人能做事,团结小人不坏事。 2,多起感恩之心,勿起背主之念。 3,精力管理的本质在于提升思考方式、行为方式,只有思考方式、行为方式提升了,精力管理自然就上去了。 4,员工是无法与老板想到一块去的,因为员工需要承担的是执行和不断反馈的责任,而老板需要...

  终于醒悟来,原来周末的活动,不宅都是想给SS看的。而如今,与何人说。无所事事,毫无兴致,提不起一点精神,乏味的第二个周末。 迫着要达到15k以上的计步。晚起,午饭,今天黑开始出门。周六只想去买几件合身的衣服,去了新奥。这天的雾霾很严重,能见度很低。我居然有花近2个小时在里面...

  平行时空下 今天你跟我说起那个梦境,我在走廊上,你小跑地向着我的方向,其实那个场景是我有遐想过的,我觉得份外的亲切,感觉像是用我白天的思念来涂上梦境的颜色,能很高清无码想起那个画面,我伸手轻抚着你天真的脸颊。一瞬间的抽离令我身体触了电,轻微的抽搐令我怀疑是不是灵魂出了窍,总...

  我们都知道linux是支持多终端并行处理的 但是某些时候我们可能有比较特殊的需求需要两个人同时处理一个终端,screen正好能满足这个要求 首先需要安装screen软件: debian和ubuntu下面都是通过apt-get install screen进行安装的。 假如现...

http://rotorooterpa.com/zhongduanjizhi/210.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有