UE4_Niagara_ export particle data to blueprint

参考Niagara_Advanced内容示例 4.2 Export Particle Data to Blueprint,学习笔记,仅供参考。祝愿日子越来越好!大美兰陵越来越好!

我们要想把数据从niagara传到blueprint,需要做以下工作:

一、先设置Niagara System。

In order to tell our Niagara System which blueprint to use, we first make a User Parameter in the "System Settings" section of Niagara.(为了告诉我们Niagara系统哪一个蓝图使用,我们首先定义一个用户参数在Niagara系统设置部分)

This User Parameter will be of the type "Object" and can be named whatever you like. In this case, the name is BPCallBackHandler .(这个用户参数是Object类型,并且可以被命名为你喜欢的名字,在这个实例当中,名字叫BPCallBackHandler)

1、新建Niagara System,命名为NS_export。

2、新建一个用户公开变量object,更名为BPCallBackHandler。

3、添加粒子发射位置、初速度、粒子生命周期及大小区间。效果如下图:

4、粒子更新部分添加collision模块。

5、查看碰撞模块参数写入:

我们可以使用碰撞的有效性CollisionValid来作为下一个模块export particle data to blueprint的条件。

6、添加 Export Particle Data to Blueprint 模块。

Condition To Export Data【输出数据的条件】:为True时才输出数据 ,我们这里让碰撞有效时才传输数据

Delay Between Data Exports输出数据间延迟:设置两次输出数据的最小间隔时间

Vector to Sent(As Struct Position)发送的向量(作为结构位置)

Vector to Send(As Struct Velocity)发送的向量(作为结构速度)

Float to Send(As Struct Size)发送的浮点数(作为结构大小)

这里的向量不一定是位置、速度和大小,我们也可以传送颜色。

Export particle Data Interface:暴露粒子数据接口;

**Callback Handler Parameter【回调处理器参数】:选择把蓝图传进Niagara系统的Object类型用户参数,就是谁使用它的。**这个变量在模块Export Particle Data to Blueprint中作为回调句柄参数,其余被传输的数据包含有两个vector和一个scaler数据,Actor类蓝图中在BeginPlay设置了一个Niagara变量,就是这个变量。

GPUAllocation Mode(GPU分配模式):仅GPU粒子需要设置,使用Fixed Size(固定大小)

GPUAllocation Fixed Size(GPU分配固定大小):一帧中发送数据的粒子数量的最大值,超过此数值的粒子无法发送事件。

7、Export Particle Data to Blueprint 模块参数设置如下:

就是在碰撞发生时(CollisionValid),没设置延迟,将粒子位置、粒子颜色和0组成一个数据包,通过BPCallbackHandler将包发送到蓝图。

这里的设置要注意:比如粒子color,我们粒子的颜色发生变化才有意义,link中才有数据。这里也是为了告诉你输出到蓝图的向量不一定是速度。

二、蓝图中如何接收粒子系统的数据

1、新建actor,命名为BP_ReceiveNS。添加粒子系统组件,指定粒子系统。

2、事件开始时,告诉niagara system谁使用他。

为了告诉我们Niagara系统哪一个蓝图使用,我们首先定义一个用户参数在Niagara系统设置部分,这个用户参数是Object类型,并且可以被命名为你喜欢的名字,在这个实例当中,名字叫BPCallBackHandler,所以变量名字是这个。

3、由于是通过接口传递的数据,所以我们需要在类设置中继承接口:

4、实现接口函数:

将粒子发出的结构体数组进行遍历循环,数组成员进行拆分使用,可以计算粒子如果是碰到的角色,打印任务失败,同时把粒子颜色输出。

运行效果如图:

三、总结

1、数据传输只是两个向量和一个浮点数:

2、需要告知niagara哪个蓝图要用,用户参数是object类型。

3、niagara需要专门的模块传出,以接口的方式。

4、CPU粒子和GPU粒子都支持数据输出

GPU粒子数据导出是通过从GPU内存读回到cpu执行的。这是不可预测地潜在的非固定数量的帧,通常为1-2。导致延迟。

GPU粒子数据的导出是通过从GPU内存中读取来完成的。这通常用于游戏或图形应用程序中,其中GPU可以在渲染粒子时高效地处理它们。通过从GPU内存读取数据,可以将粒子的位置、速度等信息提取到CPU内存中,以便进一步处理或用于其他目的,例如与其他数据进行后处理或者用于编写到文件等。

GPU读回性能受到读回缓冲区大小的限制。建议使用GPU固定大小分配,使用捕获给定帧上可能发生的所有事件所需的最小值。

在这个例子中,根据生成速率和生命周期,我们知道在任何给定的时间,我们只会有1~4个粒子存活,所以固定大小可能很小。

任何超过此固定大小的事件都将无法发送。

相关推荐
高冷的上官梓芸5 分钟前
【A15】默认关闭屏保
java
爱学习的小囧5 分钟前
嵌套式 ESXi 8.x/9.0 虚拟设备下载与实战指南
java·linux·运维·服务器·虚拟化
前端 贾公子8 分钟前
uniapp中@input修改input内容不生效 | 过滤赋值无效 | 连续非法字符不更新的问题
开发语言·前端·javascript
五阿哥永琪10 分钟前
从零读懂 Java 函数式接口:Function、Consumer、Supplier、Predicate
java·开发语言
533_12 分钟前
[vxe-table] 表头:点击出现输入框
android·java·javascript
天若有情67313 分钟前
颠覆C++传统玩法!Property属性与伪类,开辟静态语言新维度
java·c++·servlet
写不来代码的草莓熊13 分钟前
el-date-picker ,自定义输入数字自动转换显示yyyy-mm-dd HH:mm:ss格式 【仅双日历 datetimerange专用】
开发语言·前端·javascript
硅基导游16 分钟前
linux系统与进程内存使用情况探测
java·linux·运维
I疯子20 分钟前
2026-04-13 打卡第 6 天
开发语言·python
LucaJu22 分钟前
Java + EasyExcel 实现单个接口导出多个Excel
java·excel