Game艺视界 发表于 2024-1-1 20:54:33

UE5.2_PCG蓝图公开Static Mesh变量;快速替换模型资产 | 无需编辑图表

当我们使用 PCG 时,重要的是利用静态网格体生成器来添加我们的模型

在实际应用中,我们可能需要频繁更换分布的模型。为了便于替换,我们可以将参数暴露出来



这样添加或许更加方便,直接将我们模型拖放进插槽




接下来,我们将了解如何在关卡中动态切换网格,而无需进入 PCG 图表节点进行替换
一般情况下我们使用静态网格加权选择器,通过加号我们添加需要静态网格体,然后再这里修改,这不是很方便



同时epica提供另一种方式,按属性选择网格,你需要给他一个属性名,从点上来读取数据

它要求一个属性名字和一个输出属性名




我们创建一个Blueprint元素,然后双击打开它




我们要做第一件事就是建立类默认值和默认变量,然后我们进行快速测试确保你的类默认值被选中
Has Default in pin(允许所有类型数据进出)取消勾选我们要自定义
Has Default Out pin(允许所有类型数据进出)取消勾选我们要自定义




展开输入,创建一个标签,它允许点数据
+扩展,自定义输出引脚并放上标签,这也是点数据
我们将向库公开此操作,以便在 PCG 图中将其显示为,给它一个类别




这里的基类重写一些函数,所以让我们从重写节点标题开始
AssignMeshToPoints节点名称




添加新的变量
网格文件路径(MeshFilePath)第一个变量是一个字符串,然后单击眼睛图标,以便它是可编辑的实例转到第二个(MeshScale),让我们称之为一个网格比例,我们稍后将实现它,这将是一个浮动,再次单击眼睛图标,以便它是可编辑的



现在返回到 PCG 图表,您可以在左侧有了一个新的网格类别,我们的节点在这里,变量以及网格文件路径和网格比例,我们现在应该能够将这




我们回到蓝图创建下一个函数,这是该蓝图的核心,这是当节点到达PCG 图中时执行的内容,




①我们首先要做的是解压缩输入以获得点数据,我们右键单击并将其提升为局部变量,我们称之为Context



②接下来我们需要做的是我们需要选择正确的输入引脚,来从引脚的输入类型中获取数据,并通过引脚获取输入并将其连接,我们需要说出我们是哪个引脚从中获取数据,如果您右键单击它并再次提升为局部变量,其拖到此处,我们希望为引脚提供 in 标签,以便它与我们的输入引脚名称相匹配,以便将从输入中获取数据



【Get Inputs by pin】它返回的是一个顶层数组,它是 PCG 标记的数据结构,因此您可以在此处连接多个节点,因为它是一个数组,我们需要使用 For Each Loop 依次遍历每个节点对于每个循环,现在每个数组元素都是一个数据结构,我们只需要再次将其分解为我们想要的点数据,因此在此处进行中断您将看到 PCG 标签数据包含三个部分数据标签



我们只对数据感兴趣取出并转换为空间 PCG 空间数据,这就是我们想要处理的点信息 连接到循环体



我们在这里要做的最后一件事是创建一个变量,因此将其提升为局部变量,我们将其称为空间数据



#第一部分完成



接下来我们想做两件事,我们想要添加一个名为网格的新属性,然后我们想要遍历点数据并将其复制到具有该新属性的输出中,因为我们想做两件事
①使用序列节点(Sequence)来组织它所以我们将依次执行这些操作
②我们将设置新的元数据,因此拖动空间数据属性来控制将其拖到此处从
③这里有一个函数称为不可变元数据,即点数据中的可更改元数据并且获得了我们想要创建新属性的可更改元数据
④因此拖出要创建的返回值,我们想要做的是为我们的网格创建一个字符串属性因此属性名称将为mesh
⑤然后我们需要输入字符串的默认值,因此在我们的变量中,我们将网格文件路径设置为输入。默认值,这样即使我们不更改点数据中的任何内容,它也会将网格文件路径添加到每个点这样这部分就完成了
让我们对其进行注释并调用它添加带有默认文件路径的网格属性,并将其连接到第一个序列



处理所有的点并将他们传递回输出,所以我们需要这里做的是再次将我们的空间数据,将空间数据转换为一组点,让后我们已经获得点数据,我们将执行称为“点循环”的操作,它是此标准蓝图元素的一部分,因此它依次遍历每个点,因此让我们将其连接到其他序列输出



然后需要做的就是将其以反向方式打包,因此当我们启动此执行节点时将其解压现在我们需要再次将其打包,以便点数据我们需要从中再次制作 PCG 标签数据然后我们想要创建一个数据集合,这就是最初出现的数据集合,因此请制作PCG数据集合并将其放入其中,这就是我们将作为输出传递的内容,然后我们不这样做 不仅仅需要将它们连接在一起



点循环
这样它就会复制每个传入的点到每个传出的点,确保单击返回值√




回到BP_PCG_Test,添加变量公开新变量然后传递 到PCG 图中,所以在我们的变量中,我们将添加两个新变量、
Mesh:确保选择静态网格对象引用
MeshFilePath:网格文件的路径
MeshScale:网格体缩放




那么如果我们更改中的网格蓝图我们想要将网格转换
将静态网格与控件拖放到图表;获取路径字符串,以便将引用的网格对象转换为所谓的软引用(带有该对象路径的字符串),我们要做的最后一件事是设置网格文件路径,因此使用Alt键拖动该路径 输出并将其连接并连接到构造脚本,因此每次我们更改网格时,它都会重置与其关联的网格文件路径,然后我们可以将其传递到PCG 图中,因此编译并可以将其传递到PCG 图中,因此编译并



我们回到我们的 PCG 图我们现在有两个可以传入的字符串,因此我们需要在此处使用的节点是获取 actor 属性,输入我们需要传入的参数



我们需要处理下变换信息
首先我们需要打破pcg节点,展开我们可以看到它具有来自该点数据集的所有相对或相关数据,因此让我们在这里进行变换,打破变换,变换包括位置旋转和缩放,我们乘以缩放




#方案二

通过pcg图标中图设置:在这里有实例参数,因此如果我单击添加新属性




我们可以做的是添加带有软对象路径的新属性【soft ob】
然后可以重命名,也可以给他一个默认值



回到蓝图,让我们添加属性节点,我们想要添加网格的新输出属性名称Mesh,让我们从其中的变换获取点属性,我们希望从源参数执行此操作 但首先将其设置为String,从源参数中进行字符串软对象路径,现在如果您确实在图形参数中获得了网格,那么我们就可以获得我们的我们设置的参数 可以插入它,这样我们就可以在这里获取参数并将其添加为名为网格的属性,然后您可以将其连接到静态网格生成器



修改我们静态网格生成器类型,属性修改为Mesh




方案二:我们设置的接口在蓝图pcg下,使用不是很方便还要去选择一下




接下来我们来到蓝图解决下这个问题:
这里为我们的静态网格物体,并打开后面小眼睛
此处添加另一个变量 我们将其称为网格文件路径






然后我们回到蓝图中制作与案例1相同设置,这样我们的参数就可以暴露在蓝图上




我们还需要更改下蓝图,不在是使用Mesh要获取属性,这个属性就是我们蓝图中创建的变量网格位置文件位置信息MeshFilePath




完整节点截图



效果:同样可以实现案例一的功能




继续添加网格比例变量

然后我们在pcg图表中添加变换点控制的属性



最终效果




【以原视频讲解为准↓】
下期我们继续公开 Static Mesh 的其它参数,方便我们修改


虚幻引擎5 BluePrint(蓝图)
UE5.2预览版PCG工具系列
Houdini基础入门系列 | Houdini大世界制作#更多详细文章分类知乎专栏 | 左侧文章目录便于查找https://zhuanlan.zhihu.com/p/659080390
坚持与您“分享”最有价值“干货”内容本期分享就到这里,我们下期见!



Shiva希瓦 发表于 2023-10-27 15:56:05

{:1_227:}好长啊

erwr58 发表于 2023-10-27 20:31:15

给力喲

areyouaboy 发表于 2023-10-28 11:30:29

相当不错,感谢分享!
页: [1]
查看完整版本: UE5.2_PCG蓝图公开Static Mesh变量;快速替换模型资产 | 无需编辑图表