“我正在参加掘金社区游戏创意投稿大赛个人赛,详情请看:游戏创意投稿大赛”
Niagara 相关小贴士
如何重命名引脚(Pin)
重命名方法很简单,只要从窗口上右键单击 Pin. 你还可以从这里对 Pin 进行排序和删除。
如何隐藏 Niagara 发射器和系统的背景
在黑色背景上更容易看清白色粒子的效果。发射器和系统的操作是相同的。
第一步, 打开 Window> Preview Scene Settings
第二步,你可以通过关闭 Show Environment 来关闭背景
效果如下所示
Niagara 节点相关小贴士
接下来,将介绍关于节点的技巧
条件分支
Niagara 有一个 If 节点,但是使用起来有点特殊
Material 也有一个 If 节点。
在 Blueprint 中,则对应的是 Branch
现在,Niagara 的 If 节点的 特殊之处 在于,你可以选择任何你想要返回的值
此外,在 Niagara 没有更多或更少的 值比较 节点。
无论类型设置如何,如果条件为 true,则输出 A 的值;
如果条件为 false,则输出 B 的值。
更特别的是,你可以添加多个输出引脚。乍一看,它看起来很复杂,但结果是一样的,如果为真,输出 A 的值,如果为假,输出 B 的值。
另外,不像 If 节点,还提供了 bool 的 AND、OR、NOT 和 bit 操作
自定义的 HLSL 节点
接下来是定制 HLSL 节点。 对于程序员和接触 Material 的人来说,这是一个熟悉的节点。 它是一个让你可以直接写着色器代码的节点。
在 Material 中它是一个名为 Custom 的节点。
与 Material 的 Custom 节点不同,它是直接写入节点的
另外,另一件特别的事情是,这个节点似乎只有一个 void 的返回值。
因此,当需要返回一个值时,它将被分配到 OutputPin 所指定的值
注释节点
对于那些接触过蓝图和材质的人来说,这是一个非常熟悉的节点。 然而,不幸的是,它没有搭配的 C 键。 这是一个麻烦,但我们可以通过输入 comment 打开节点
转换节点
介绍的最后一个节点是 Convert 节点,是 Niagara 最有用的节点
正如名称 “Convert” 所暗示的,通常用于一些值转换的用途,例如将 Vector 分解为 XYZ。
蓝图当中同样也有类似的
这个 Convert 节点的强大之处在于,您可以自由定制输入和输出引脚。
例(1) 坐标重组
您可以使用一个节点将 XYZ 重新排列为 YZX。
如果使用的是 Blueprint 的话,则有两个节点
例(2) 转化为分离的类型
将 Vector 分解为三个分量
例(3) 只更新一个轴
两个输入引脚,一个分配给 XY,仅有 Z 可以被一个节点更新,这样是挺方便的
例(4) 缩短 Min 和 Max
例如,带范围限制的随机数生成,通常在 Blueprint 中是这样的
Blueprint 的例子如下
在 Blueprint 中,您可以直接输入该值,因此它可以通过一个节点来实现,但如果你使用 Niagara 的转换(Convert)节点,这样的输入将是智能的
例(5) 使用多个引脚
因为 Niagara 可以处理矩阵,所以也可以用这种方式创建矩阵。
这里,只有一个输出引脚,但可以是多个的 —— 作为一个尝试的结果,它没有崩溃,即使我设置输入和输出到 20. (但我通常不会这么做,因为不方便管理这么多引脚)
关于 Niagara 的崩溃问题
Promote to Parameter(提升为参数)的崩溃
在尝试转换一个变量为 Niagara Module Script 的参数时发生崩溃,EdGraphNode.cpp 中的 GetGraph 函数停止了工作。
查看调用历史,在 NiagaraNodeInput.cpp 中,UNiagaraNodeInput 的 SetDataIninterface 被调用,但是我担心 DataInterface 和 InDataInterface 在这个时候是 null 的。
void UNiagaraNodeInput :: SetDataInterface (UNiagaraDataInterface * InDataInterface)
{
if (DataInterface! = nullptr)
{
DataInterface-> OnChanged (). RemoveAll (this);
}
DataInterface = InDataInterface;
if (DataInterface! = nullptr)
{
DataInterface-> OnChanged (). AddUObject (this, & UNiagaraNodeInput :: DataInterfaceChanged);
}
DataInterfaceChanged ();
}
当 Niagara 系统打开时,关闭编辑器崩溃
编辑器崩溃,但关闭编辑器后,一个崩溃对话框出现,这似乎对工作数据没有特别的影响,所以可能不会有太大的问题。似乎 Renderer 的崩溃与在 NiagaraComponent.cpp 的 GetAllocatedSize 的一个无效值有关。
uint32 FNiagaraSceneProxy :: GetAllocatedSize () const
{
uint32 DynamicDataSize = 0 ;
for (NiagaraRenderer * Renderer: EmitterRenderers)
{
if (Renderer)
{
DynamicDataSize + = Renderer-> GetDynamicDataSize ();
}
}
return FPrimitiveSceneProxy :: GetAllocatedSize () + DynamicDataSize;
}
总结
这里有一些关于 Niagara 的简单小贴士。
Convert 节点非常方便,所以请尽情使用它 !