Skip to main content

反应式组件概述

反应式组件(Reactive Component)是一种根据游戏对象(GameObject)(及其父对象)或者 菜单项(Menu Item) 的开关状态而对虚拟形象应用效果的组件。能够在不用手动制作动画的情况下实现构建简单开关,换装时调整形态键等等。

以下为当前可用的反应式组件:

反应式组件的一般原理

一般来说,反应式组件(Reactive Component)会在他们激活时应用效果。当以下条件满足时,反应式组件被认定为激活状态:

  • 组件的游戏对象(GameObject)和它的所有父对象在场景中处于启用状态。
  • 当组件位于一个 菜单项(Menu Item) 的同一个对象或者子对象中,并且该菜单项被选中时。
    • 请注意,当菜单项在组件的父对象中时,只会对父对象中第一个菜单项进行判断(父对象中的子菜单(Submenu)不会参与判断)。

在编译您的虚拟形象后,反应式组件会在下列情况发生时产生反应:

  • 通过动画修改了游戏对象的状态时
  • 被物体开关(Object Toggle)影响到时
  • 菜单项被操作时

您可以启用 Invert condition(反转条件) 选项。启用后,只要任意条件为真时应用效果。

优先级原则

如果多个反应式组件同时被激活,并且存在冲突(比如一个组件尝试启用一个对象的同时,另一个组件尝试关闭同一个对象),则最低层级的组件优先。

反应时序

⚠️ 注意

反应式组件的精准时序会在后续的优化中修改。请不要在复杂效果的使用上依赖现阶段的精准时序。

反应式组件会在游戏对象状态改变的一帧后做出反应。当游戏对象被关闭时,对象会延迟一帧后与反应式组件同时关闭。 有关原因的详情可以查看 变形器(Shape Changer)

如果一个反应式组件控制另一个反应式组件的状态,那么每一个组件的触发都会有一帧延迟。这个延迟将会单独应用在每一个反应式组件上,也就是说如果存在 A -> B -> C,A 被关闭,时序将会如下:

  • 第一帧:无事发生(A 的关闭被延迟)
  • 第二帧:A 被关闭(B 的关闭被延迟)
  • 第三帧:B 和 C 同时被关闭

问题调试

反应式组件系统附带一个调试器,这个调试器能够用来模拟开关对象或者菜单项之后的效果。可以通过右键一个游戏对象后选择 Modular Avatar -> Show Reaction Debugger 来访问。实现的具体细节请查看 调试器文档(Debugger Documentation)