Choose your operating system:
Windows
macOS
Linux
群集事件是使nDisplay群集中所有节点同时对事件响应的一种方法。
可在群集的节点中生成群集事件,也可从外部应用程序将其发送到主节点进行生成。参阅从蓝图发射群集事件或从外部应用程序发射群集事件。
启动并运行nDisplay群集时,还可使用 nDisplay启动器 应用程序发送群集节点的新群集事件进行响应。参阅从nDisplay启动器发射群集事件。群集主节点收到群集事件时,其会将该事件传播到群集中的所有节点,以便在相同帧处的所有节点上发生该事件。
在虚幻引擎应用程序的蓝图或C++逻辑中,设置监听器检测此类群集事件并使用项目所需gameplay逻辑进行响应。参阅响应蓝图中的群集事件。
群集事件结构
各nDisplay群集事件均可包含以下几个属性:
设置 |
类型 |
---|---|
命名 |
字符串 |
类型 |
字符串 |
类别 |
字符串 |
参数 |
键值对的可选映射,其中的键和值均为字符串。 |
可在项目中决定发送到各属性中的数据,及监听器解译此类数据的方式。
与蓝图中的群集事件进行交互时,可使用 *Make DisplayClusterClusterEvent** 和 **Break DisplayClusterClusterEvent** 节点来构造和解构群集事件。例如:
在C++中,或者当您从自己的应用程序中发出群集事件时,您将使用JSON来表示相同的结构。例如,上述群集事件的等效JSON为:
{"Name":"activate","Type":"command","Category":"particles","Parameters":{"rate":"200","speed":"3"}}
从蓝图发射群集事件
要从项目中的蓝图类发出一个群集事件,请执行以下操作:
获得 DisplayCluster Module API(请参阅上文的蓝图API),并调用其 群集(Cluster) > (发射群集事件(接口函数)(Emits cluster event (接口调用)) 函数。该节点向主节点发射群集事件,标记API中的主节点,再传播回群集中的所有节点。
在gameplay逻辑中计算该蓝图节点的虚幻引擎应用程序各实例,会默认发射该群集事件。如在群集中的众多不同节点上计算该蓝图图表,则可能产生该事件的多个副本。
为避免产生该群集事件的多个副本,可以在 Emits cluster event 节点上设置 仅主节点(Master Only) 布尔值。如勾选此项,仅主节点会发射该群集事件。如其他非主群集节点计算相同的蓝图图表,此类节点将不会发射事件。
从 Emits cluster event 节点的 事件(Event) 端口向右拖出,并选择 Make DisplayClusterClusterEvent。
使用 Make DisplayClusterClusterEvent 节点中的设置来设置群集事件,为其 命名、类型 和 类别 设置字符串值。如需要随群集事件传递任意键值数据,可将此类键和值的映射传到 参数 输入。
编译 并 保存 蓝图。
下次重新打包项目并重新启动nDisplay群集时,该蓝图代码将发射设置的群集事件。要在蓝图代码中其他位置响应该事件,参阅响应蓝图中的群集事件。
从外部应用程序发射群集事件
启动nDisplay群集时,主节点开始聆听特定本地端口上传入的群集事件。通过连接该端口并发送消息,可在网络中其他计算机上运行的另一应用程序中,向nDisplay系统发射新的群集事件。
对于要发出的各群集节点,发送消息必须遵循以下条件:
前四个字节必须给定消息剩余部分的总长度。
消息的剩余部分应为群集事件的内容,以JSON对象表示。
例如,要发射命名为"quit"和类型为"command"的群集事件,需要进行以下操作:
构造包含群集节点值的JSON字符串。在本例中:
{"Name":"quit","Type":"command","Category":"","Parameters":{}}
命名、类型 和 类别 为必填字段,但可忽略参数字段。
获取JSON字符串的长度——在本例中为62个字符——并将该长度发送到nDisplay主节点。
将JSON字符串发送到nDisplay主节点。
主节点默认聆听端口14003上的群集事件。可在nDisplay配置文件中更改此默认设置。参阅更改nDisplay通信端口。
要响应项目蓝图代码中的此类群集事件,参阅响应蓝图中的群集事件。
从nDisplay启动器发射群集事件
nDisplay群集运行时,可随时使用 nDisplayLauncher 应用程序将群集事件发送到主节点。
如常启动nDisplay群集。
切换到 群集事件 选项卡。使用此选项卡设置群集事件并按需将其发送到群集。
点击 新建 向此选项卡上的列表添加新群集事件。
使用 群集事件编辑器 窗口为该群集事件设置 命名、类型 和 类别 值。
还可向群集事件的列表或参数添加键值对。在 参数 字段中设置键,在 值 字段中设置值,然后点击 + 按钮。
如创建参数后需进行修改,在右侧列表中选中参数,然后点击 - 删除。然后使用所需设置重新新建参数。
点击 应用 以保存新群集事件。
回到 群集事件 选项卡,在列表中选择群集事件,然后点击 发送(Send)。
还可点击 修改 以重新打开并编辑选中群集事件的值。
要响应项目蓝图代码中的此类群集事件,参阅响应蓝图中的群集事件。
响应蓝图中的群集事件
设置上述方法之一将群集事件发送到nDisplay网络后,需设置蓝图(或C++)gameplay逻辑来检测此类群集事件并以对其响应。为此,需要创建并注册监听器:实现 DisplayClusterClusterEventListener 接口的类。可通过在nDisplay API中调用 添加群集事件监听器(Add Cluster Event Listener) 函数注册监听器,然后使用 Event On Cluster Event 节点来检测并响应群集事件。
例如,要新建蓝图类并将其注册为监听器:
在 内容浏览器 中,右键点击并选择 创建基础资源(Create a Basic Asset)> 蓝图类(Blueprint Class)。
将 Actor 选为父类。
在 内容浏览器 中输入新监听器类的命名。
将类拖入关卡视口,并将其拖放到关卡中。
双击新蓝图类可编辑。
在工具栏中,点击 类设置(Class Settings)。
在 细节 面板中,找到 接口(Interfaces)> 已实现接口(Implemented Interfaces) 设置,然后点击 添加。
在列表中找到并选择 DisplayClusterClusterEventListener 接口。
点击工具栏中的 编译 以编译类。
在 事件图表(Event Graph) 选项卡上,设置以下图表以注册监听器:
要进行此设置:
从 Begin Play 事件节点直接向右拖出并选择 (N显示)N Display > (N显示)N Display > (获取DisplayCluster模块API)Get DisplayCluster Module API。
从该节点的 Out API 端口直接向右拖出并选择 显示群集(Display Cluster) > 群集(Cluster) > (添加群集时间监听器(接口调用)(Add cluster event listener)。
最后,从 Add cluster event listener 节点的 监听器 端口向左拖出,并选择 (变量)Variables > (获取自身引用)Get a reference to self。
如不再需要监听器时,建议将其销毁。例如,销毁蓝图Actor时可如下操作:
要进行这一设置,请执行以下操作:
右键点击事件图表并选择 添加事件(Add Event) > 事件销毁(Event Destroyed) 节点。
从 Event Destroyed 节点的输出向右拖出,并选择 N显示(N Display) > 获取DisplayCluster模块API(Get DisplayCluster Module API)。
从该节点的 输出API(Out API) 端口向右拖出,并选择 显示群集(Display Cluster)> 群集(Cluster)> 移除群集事件监听器(Remove cluster event listener)(接口调用)。
最后,从 Remove cluster event listener 节点的 监听器(Listener) 端口向左拖出,并选择 变量(Variables)> 获取自身引用(Get a reference to self)。
在 事件图表(Event Graph) 另一个区域,添加 Add Event > N Display > Event On Cluster Event 节点。在nDisplay群集中发生群集事件时,均会触发该事件。
建议读取指定给该事件的设置和参数,以便用于确定蓝图需要采取的操作。为此,从事件 On Cluster Event 节点的 事件 端口向右拖出,并选择 中断DisplayClusterClusterEvent(Break DisplayClusterClusterEvent)。
例如,该图表会将所有群集事件的命名值直接输出到屏幕上:编译 并 保存 蓝图类。
下次在群集内,发射任何源中的群集事件时,将打印该群集事件命名到屏幕上。