“我正在参加掘金社区游戏创意投稿大赛个人赛,详情请看:游戏创意投稿大赛”
如何从 Blueprint 获取 Niagara Emitter 的信息
UE 4.25 之前
在 UE4.25 版本之前比如 UE4.24.3, 存在通过 Get Niagara Emitter XX 访问发射器(Emitter)信息的方法
这非常简单,因为只需要指定发射器的名称。
但是这些节点从 UE4.25 就被废弃了。。。
所以,接下来我将介绍,在 UE4.25 和以后,如何从蓝图中获取 Niagara 发射器的信息。
UE 4.25 之后
Niagara 端的设置
用于数据导出的模块(Module)创建
首先, 我们从 FX-> Niagara Module Script 创建一个新的模块
并将它的名字取为 "NMS_ExportExample"
创建 Niagara Module Script 之后, 首先勾选 "Expose to Library" ,以免忘记。如果你不在这里检查,你将无法从 Niagara 中使用它。
接下来,我们添加 "New Export particle data" 来输出粒子数据
然后使用 "Store Particle Data" 来存储输出的粒子数据
- 存储数据(Store Data): 保留数据的条件。
如果你勾选了它,该值将始终被持有。
作为 添加条件表达式 的示例,你可以将碰撞模块(Collision Module)添加到 Particle ,并仅在点击时存储位置信息。
关于位置、大小和速度没有什么特殊含义,所以可以如往常一般输入这些值。
在这个例子中,只使用了 位置 信息,所以我设置如下
然而,仅仅完成以上这些将导致一个错误,因为 Map Set 没有完成,所以我将添加一个值 —— 我添加一个新的 bool 类型变量到粒子属性(Particle Attributes),命名为 “StoreSuccess”,但你可以取任何名字。
添加新增的属性(StoreSucess)到 MapSet,并设置为 StoreParticleData 的返回值
这样就完成了模块脚本(Module Script)。
创建 Niagara System
创建一个新的 Niagara 系统,并选择 New system from selected emitter (s)
接着为发射器选择 "Omnidirectional Burst" (全向爆发)
然后命名为 "NS_Example"
打开 NS_Example,将之前创建的 “NMS Export Example” (NMS_Export Example 模块脚本) 添加到 “Particle Update” 中
事实上,在 Callback Handler Parameter 中没有参数(即实现粒子数据回调的蓝图对象)可以设置,所以 有必要 添加一个新的参数。
为 User Exposed 参数栏中 添加一个类型为 Object 的参数
我暂时将其命名为 “ExportHandler” ,名称是什么并不重要,但是稍后会在使用 Blueprint 时,将需要这个名称
通过添加对象(Object)类型参数, Handler 可以在 NMS Export Example (在 Blueprint 中)被创建之时进行设置(将用于对接的蓝图对象设置进去)。选择 NMS Export Example,在其下的 Callback Handler Parameter 中设置 User.ExportHandler。
这就完成了 Niagara Emitter 端的设置。
除此以外,我还添加了 碰撞 ,为了之后便于调试时检查其行为
Blueprint 端的设置
前面啰嗦了那么多,现在终于有可能从蓝图得到发射器的值了。
创建一个继承自 Actor 的 Blueprint,并将其命名为 “BP_ExampleActor”。 不要忘记把它放在关卡中一个适当的位置。
当你打开 “BP_ExampleActor” 时,首先通过添加组件添加 “Niagara Particle System” 。
选择添加的组件,并分配之前创建的 “NS_Example”
接下来,初始化 Niagara 系统的 ExportHandler。 在 Niagara 组件中选择 Set Niagara Variable (Object) 结点,在 BeginPlay 结点后调用并连接它,如图所示。
另外,还将为它的 Object 分配 “BP_ExampleActor” (即之前 Niagara 中设置的回调对象)
接着,需要实现 Niagara 的回调函数(即通过对接对象获取粒子数据的方法),选择 “Class Settings”
从 Add 界面里选择 "Niagara Particle Callback Handler"
如果 “Receive Particle Data” 被添加到 “我的蓝图” 标签页上的界面,那么它就被设置了。
然后在 “Receive Particle Data” 中选择 “Implement Function” (实现了该接口的回调函数),之后便可以添加对 Receive Particle Data 的 (事件) 具体处理。
至此,我们就 得到了 Niagara 发射器的 位置 信息,并试图绘制用于调试的球体。
现在我可以确定正确地获取了该值。
总结
在这个例子中,因为这个值只在 Niagara 模块脚本(Module Script)中为 Position 设置,所以除了 Position 之外的值不会被赋值。
但是,可以通过在模块脚本中进一步编写来分配各种自定义值。
此外,还可以根据模块的 Store Data 标志的设备判断各种条件,如命中判断。