反应式组件概述
反应式组件(Reactive Component)是一种根据游戏对象(GameObject)(及其父对象)或者 菜单项(Menu Item) 的开关状态而对虚拟形象应用效果的组件。能够在不用手动制作动画的情况下实现构建简单开关,换装时调整形态键等等。
以下为当前可用的反应式组件:
- 对象开关(Object Toggle) - 控制其他指定的游戏对象(GameObject)的开关状态
- 变形器(Shape Changer) - 调整指定的带蒙皮网格渲染器(Skinned Mesh Renderer)的形态键
- 材质设定器(Material Setter) - 更换指定的网格渲染器(Renderer)的材质
反应式组件的一般原理
一般来说,反应式组件(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)。
No Comments