几何体脚本提供了蓝图和Python函数,用于创建自定义建模工具和工作流程。本指南介绍了通过蓝图使用几何体脚本的基础知识。下面的步骤介绍了如何生成流程性网格体工具来设计关卡,类似于为Lyra示例项目创建的几何体工具。
本指南介绍了如何:
- 生成用于快速关卡分块的流程性几何体。
- 使用布尔值运算动态切割网格体。
- 创建静态网格体烘焙函数。
本指南是你可以使用几何体脚本创建的流程性网格体生成和工具的小示例。高级示例是 流程性内容生成框架(Procedural Content Generation Framework) ,它使用几何体脚本作为基础。如需详细了解此工具集,请参阅流程性内容生成概述。
除了流程性生成之外,你还可以创建的其他工作流程包括:
必备知识
要理解并使用本页面上的内容,你必须:
本指南使用第三人称模板。但是,你可以使用任何项目。
启用插件
目前,几何体脚本是一种试验性插件,默认禁用,因此需要激活。
要启用插件,请执行以下操作:
-
在 菜单栏(Menu Bar) 中,选择 编辑(Edit) > 插件(Plugins) 。
-
在搜索栏中输入"geometry script"。
- 启用 几何体脚本(Geometry Script) 插件,并在弹出对话框中选t 是(Yes) 。
- 重启引擎。
创建蓝图类
首先,你必须确保拥有正确的蓝图类。由于目标是创建用于设计关卡的流程性网格体,你需要使用 GeneratedDynamicMeshActor 类。
要选择蓝图类,请执行以下操作:
- 在 内容浏览器(Content Browser) 中,右键点击并选择 蓝图类(Blueprint Class) 。
-
搜索并选择 GeneratedDynamicMeshActor 。
- 将蓝图命名为 BP_ProceduralGen 。
如果你没看到 GeneratedDynamicMeshActor 选项,说明几何体脚本插件未启用。
设置事件
生成你的类后,你可以开始在 事件图表(Event Graph) 中创建节点。
要创建事件,请执行以下操作:
- 在内容浏览器中,双击蓝图类。
- 打开 事件图表(Event Graph) 。
-
右键点击图表,并输入"generated mesh"以筛选可用节点,然后选择 Event on Rebuild Generated Mesh 。此事件会在你每次更新动态网格体的参数时触发,导致网格体重新构建。
-
将 目标网格体(Target Mesh) 输出提升为本地变量,方法是右键点击其引脚并选择 提升为变量(Promote to Variable) 。
- 将变量命名为 DynamicMesh ,将类型设置为 动态网格体(Dynamic Mesh) 并设为私密。此变量表示你编辑的动态网格体。
构建几何体
创建蓝图类和事件后,你可以开始添加几何体脚本函数。本指南中的目标是生成你可以变换和切割的阻挡形状。为此,你需要首先创建你想编辑的网格体。
要创建网格体,请执行以下操作:
- 拖移 DynamicMesh 变量的执行引脚,然后搜索并选择 Append Box 节点。这会将盒体图元添加到动态网格体。
-
将 DynamicMesh 变量的输出引脚连接到 目标网格体(Target Mesh) 输入引脚。
使用这前几个节点,你创建了流程性网格体。你可以编译蓝图并将其拖放到关卡中进行测试。如需了解你可以立即创建其他哪些形状,请参阅几何体脚本参考文档的图元生成小节。
添加变换控件
为了能够动态调整网格体的变换,你可以添加交互式功能按钮。
要添加交互式功能按钮,请执行以下操作:
-
创建名为 BoxSize 的新公共变量,并将类型设置为向量。
-
在此变量的 细节(Details) 面板中,启用 实例可编辑(Instance Editable) 和 显示3D控件(Show 3D widget) 。 将 默认值(Default Value) 设置为200, 200, 200。启用3D控件会创建操控器,用于交互式控制X、Y、Z变换。
- 拖出变量并选择 Get BoxSize 。
- 右键点击变量并选择 拆分结构体引脚(Split Struct Pin) 。变量的X、Y、Z值将驱动盒体的维度。
-
将对应的X、Y、Z值连接到 Append Box 的相应维度值。
- 编译(Compile) (Ctrl + Alt)并 保存(Save) (Ctrl + S)。
现在你可以生成立方体网格体并动态调整维度。每次使用控件进行调整,都会生成设定大小的新动态网格体,而不是缩放网格体。

要使控件显示,你必须处于 选择模式(Selection Mode) 。
使用布尔值编辑
布尔值运算减去或加上网格体对。这些很适合用于向网格体快速添加细节和置换效果。要为布尔值函数创建第二个网格体,你可以从网格体池分配临时网格体。临时网格体可避免编辑器中不必要的几何体,这样计算处理的负担更轻。
要创建布尔值函数,请执行以下操作:
- 右键点击图表,然后搜索并选择 Get Compute Mesh Pool 。这会分配临时网格体以执行布尔值运算。
- 将 Append Box 的执行引脚固定到 Get Compute Mesh Pool 。
-
拖出 返回值(Return Value) 引脚,然后搜索并选择 Request Mesh 。连接执行引脚。
- 拖出 返回值(Return Value) 引脚,然后搜索并选择 Append Cylinder 。此节点会添加一个圆柱体网格体,你将用于从盒体网格体中减去这部分。
-
将输出 目标网格体(Target Mesh) 提升为名为 BoolMesh 的变量。将类型设置为 动态网格体(Dynamic Mesh) 并设为私密。
- 拖出 BoolMesh 的执行引脚,然后搜索并选择 Apply Mesh Boolean 。你将使用此节点将布尔值运算应用于网格体。
- 拖出 DynamicMesh 变量并连接到 Apply Mesh Boolean 的 目标网格体(Target Mesh) 输入。
-
将 BoolMesh 连接到 Apply Mesh Boolean 的 工具网格体(Tool Mesh) 引脚。工具网格体(Tool Mesh) 表示你想对其执行布尔值运算的网格体。此参数是你添加 Append Cylinder 节点的原因。
- 将Apply Mesh Boolean节点中的运算类型设置为 减去(Subtract) 。
- 应用所需的运算后,你必须将临时网格体返回到池中,以便可以复用其内存。将Apply Mesh Boolean的执行引脚连接到 Release All Compute Meshes。触发该事件后,池分配的所有计算网格体都将释放。
- 编译(Compile) (Ctrl + Alt)并 保存(Save) (Ctrl + S)。
在关卡编辑器中编译并查看蓝图后,你可能看不到布尔值效果,因为它太小了。要查看效果,你可以手动设置布尔值网格体的大小,或使用控件动态调整。
添加控件
就像你为盒体图元创建了控件那样,你可以为布尔值网格体和位置执行相同的操作。
要创建控件,请执行以下操作:
-
在 变量(Variables) 面板下,为布尔值网格体的位置创建公共变量,将其命名为 BoolLocation ,并将类型设置为 向量(Vector) 。
-
在 细节(Details) 面板中,启用 实例可编辑(Instance Editable) 和 显示3D控件(Show 3D widget) 。
-
右键点击 Append Cylinder 节点的 变换(Transform) 引脚,选择 拆分结构体引脚(Split Struct Pin) ,然后将 BoolLocation 变量连接到 Transform Location 。
- 创建另一个公共变量,将其命名为 BoolSize ,并将类型设置为向量。你可以使用该变量来调整布尔值网格体的大小。
- 在 细节(Details) 面板中,启用 实例可编辑(Instance Editable) 和 显示3D控件(Show 3D widget) ,然后将 默认值(Default Value) 设置为1、1和5。
- 将变量拖动到图表中,然后选择 Get Bool Size 。
- 右键点击引脚并选择 拆分结构体引脚(Split Struct Pin) 。
-
将 布尔值大小(Bool Size) 引脚连接到 Append Cylinder 节点的相应 变换比例(Transform Scale) 引脚。
- 编译(Compile) (Ctrl + Alt)并 保存(Save) (Ctrl + S)。
现在你有一个网格体,可以动态变换为不同的形状。

烘焙到静态网格体函数
现在,你有了动态生成的网格体,可以将其应用于现有静态网格体,快速设计关卡。为此,你可以创建函数并公开到关卡编辑器的 细节(Details) 面板中。
要控制何时更新静态网格体,请执行以下操作:
-
创建名为 烘焙静态网格体(Bake Static Mesh) 的新函数。
-
在函数的 细节(Details) 面板中,启用 在编辑器中调用(Call in Editor) 以从关卡编辑器激活事件。
- 拖移函数的执行引脚,然后搜索并选择 Get Dynamic Mesh 。该函数会拉取当前使用中的动态网格体。
-
拖移 获取动态网格体(Get Dynamic Mesh) 执行引脚,然后搜索并选择 Copy Mesh to Static Mesh 。还要将 返回值(Return Value) 连接到 源动态网格体(From Dynamic Mesh) 。函数执行时,动态网格体会烘焙到所选静态网格体。
- 要选择你想烘焙的静态网格体,你必须将参数公开到编辑器。创建一个公共变量,将其命名为 TargetMesh ,并将类型设置为 静态网格体(Static Mesh) 。
- 将变量拖入图表中并选择 Get TargetMesh 。
- 右键点击变量引脚并选择 Convert to Validated Get 。此转换会将函数设置为仅当你选择网格体时才运行代码。
-
将 目标网格体(Target Mesh) 引脚连接到 目标静态网格体资产(To Static Mesh Asset) 。
最终烘焙脚本。
- 编译(Compile) 并 保存(Save) 。
-
现在关卡编辑器的 细节(Details) 面板中将显示 烘焙到静态网格体(Bake to Static Mesh) 按钮。使用按钮之前,将目标网格体更新到你想烘焙的静态网格体。
查看最终结果
利用Bake Static Mesh函数和流程性网格体脚本,你可以使用动态网格体在关卡中持续更新静态网格体。
最终流程性网格体脚本。
自行尝试
使用所学知识,尝试做出以下调整:
- 将盒体网格体更改为球体。
- 添加第二个布尔值网格体,进行额外的建模控制。
- 使用 Create New Static Mesh Asset From Mesh 将动态网格体烘焙到新的静态网格体而不是现有网格体。