Initialize Mesh Reproduction Sprite函数可以在指定模型进行采样
看起来像木乃伊
这里调整粒子的大小就不在Initialize Particle调整大小了,而是在Initialize Mesh Reproduction Sprite里面调整粒子大小了
UE5 的 Niagara Particle Attribute Reader 是用于在粒子系统中读取和共享粒子属性数据的工具,允许粒子之间或跨发射器动态交互。以下是详细解析:
1. 核心定义
功能:在 Niagara 粒子系统中,它是一个模块或脚本节点,用于读取特定粒子(来自当前或其他发射器)的属性(如位置、速度、颜色等),并将这些数据用于驱动其他粒子的行为或计算。
定位:属于 Niagara 的高级数据交互功能,用于实现粒子间的复杂逻辑(如群体模拟、数据传递、动态响应等)。
这个Normal是真正表面上的Normal的反向
Niagara Script中用距离场就用上图的节点
Vector To Nearest Surface就是法线
Particle Attribute Reader可以根据发射器的名字来获取其他发射器的属性
Direction and Lenght Safe:V将向量传进去,可以获取Vector的Direction,也可以计算出Vector的Length
在 Unreal Engine 4.26 中,方向(Direction)和长度(Length)的安全处理通常用于避免因零向量(Zero Vector)或非法数学操作导致的崩溃或逻辑错误。以下是关键解决方法:
1. 方向(Direction)安全处理
问题场景
直接对零向量调用 Normalize()
会导致除零错误:
FVector MyVector = FVector::ZeroVector;
FVector Direction = MyVector.Normalize(); // 崩溃!
安全解决方案
使用 GetSafeNormal()
函数:
FVector MyVector = FVector::ZeroVector;
if (MyVector.Normalize())
{
// 标准化成功,可安全使用
}
else
{
// 向量长度为0,设置默认方向
FVector SafeDirection = MyVector.GetSafeNormal(1e-6f, FVector::ForwardVector);
}
- 参数说明:
1e-6f
:最小有效长度阈值(低于此值视为零向量)FVector::ForwardVector
:标准化失败时的默认方向
2. 长度(Length)安全处理
问题场景
计算长度时可能遇到无效值:
float Length = MyVector.Length(); // 可能返回极小值(如0.000001)
安全验证
通过 IsNearlyZero()
判断有效性:
if (!MyVector.IsNearlyZero(1e-4f))
{
// 向量有效,可安全使用长度
float SafeLength = MyVector.Size();
}
else
{
// 处理无效向量
}
- 参数说明:
1e-4f
是浮点数容差(避免浮点误差误判)
这个Niagara Script的蓝图节点可以安全的节点
获取另一个发射器的粒子数量
这里设置生成的速率
Spawn Particles from Other Emitter可以选择发射器名字,里面是用了Particle Atttribute Reader的,这样就可以拿到另一个发射器里面的信息了
然后就可以拿到里面的各个属性了,这个模块是采样另一个发射器里面的粒子位置,然后在部分位置生成新粒子,里面可以调整里面的颜色,位置偏移等等信息
这里利用随机数进行生成对应粒子的ID信息(LeaderID)
在之后的模块可以利用这个LeaderID信息追踪粒子,如果直接用GetVectorByIndex,那么在销毁后这个index也会变得不对,就拿不到原来的粒子信息,如果想继续正确获取粒子信息,则用ID来存储,然后用ID来拿物体信息
当前帧生成的粒子总数
Initial Mesh Orientation里面可以对模型进行旋转,首先Rotation选择Select Vector From Array,这样就可以根据Direct Array Index来让对应索引的模型进行旋转
Array Sampling Mode选择Direct,选择Direct就可以进行对对应Index模型的旋转继续宁直接操作了,然后将Direct Array Index取余,余2,就可以隔一个取一个值,这里就是在Array中的,如果Index为0,那么你的旋转就是0,0.25,0,否则是0,0,0,这样就可以达到隔一个旋转朝向不一样的效果
这里的Calculate Link Constraint节点
ChainOrigin就是最开始的生成粒子的起始点位置,也是锁链的锚点的位置,DistanceFromChainOrigin,就是最开始刚生成时,会计算每个模型链条对第一个链条的位置距离先存入到这个变量里面,然后把粒子当前位置传入到Calculate Link Contraint里面去,Calculate Link Constraint里面做的就是,如果现在的Position到ChainOrigin的位置超过了DistanceFromChainOrigin,就去矫正它现在Position的长度到ChainOrigin的距离和DistanceFromChainOrigin一样,将BackwardConstraint返回回去就是需要矫正的位置信息,这个时候将Position加上矫正的信息,那么矫正的位置信息与ChainOrigin的距离就是DistanceFromChainOrigin