返回 导航

UE5

hangge.com

UE5 - 实现沿样条曲线动态添加静态网格体实例教程(在样条上生成导航箭头)

作者:hangge | 2025-09-23 10:00
    在 Unreal Engine 5 中,样条曲线(Spline)是一种强大的工具,能够用来定义路径、生成道路、布置物体等。本文将介绍如何实现沿着样条曲线动态添加静态网格体实例(Instanced Static Mesh),该方案特别适合围墙,路边石头,墙面等使用场景。

1,实现原理

(1)由于生成的静态网格体实例较多,这里我们使用了“实例化静态网格体组件”。“实例化静态网格体组件”可以将多个相同的静态网格合并在一个组件中渲染。它的每个实例只记录自身的变换(位置/旋转/缩放),共享同一材质、碰撞等属性 。如此一来,引擎可以通过一次渲染调用同时绘制大量相同网格实例,大幅减少绘制调用次数(draw calls),从而提升渲染性能。
  • 在蓝图中使用 Instanced Static Mesh 时,可先在 Actor 的组件面板添加一个 Instanced Static Mesh 组件,然后使用相关节点批量生成和管理实例。
  • 常用的节点包括:Add Instance(添加实例)、Remove Instance(移除指定索引实例)、Clear Instances(清空所有实例)、Get Instance CountGet Instance Transform(获取实例数量和变换)、Update Instance Transform(更新某个实例变换)等

(2)要实现该功能,我们用到了样条曲线组件的 3 个常用函数,具体如下:
  • Get Spline Length:该函数可以返回一个带有样条曲线长度的浮点值。 我们借助该函数计算需要创建多少个静态网格体实例。
  • Get Location at Distance Along Spline:该函数可以接收 Distance 作为输入参数,并返回在样条曲线中找到的位置。Coordinate Space 参数可以设置为 Local(本地)或者 World(场景)。 
  • Get Rotation at Distance Along Spline:与上一个函数的概念相同,但它的返回结果为旋转。 通过该函数与上一个函数,确定了我们添加静态网格体实例时位置和旋转角度。

2,蓝图初始化

(1)击内容浏览器中的“添加”按钮,选择“蓝图类”选项。在打开的对话框中选择 Actor 作为父类。将蓝图命名为 BP_SplinePlacement 并双击,打开蓝图编辑器。

(2)在“我的蓝图”面板中创建一个名为 StaticMeshVar 的变量,并进行如下设置:
  • 单击“变量类型”按钮并搜索“静态网格体”,将光标悬停在“静态网格体”选项上,然后在子列表中选择“对象引用” 选项。
  • 单击眼睛图标,使变量实例可编辑。
  • 编译蓝图。在 Static Mesh Var 默认值中选择 SM_FieldArrow 静态网格体。

(3)接着创建一个名为 SpaceBetweenInstances 的“浮点”类型变量。单击眼睛图标使实例可编辑。并将“默认值”设置为 100.0

(4)在“组件”面板中单击“添加”按钮,添加一个“样条组件”和一个“实例化静态网格体组件

3,创建宏

(1)接下来,我们将创建一个宏来简化构造脚本。首先在“我的蓝图”面板中创建一个名为 CalculateNumberOfInstances 的宏。

(2)在“细节”面板中创建一个名为 Number Of Instances 的“整数”类型的输出参数。

(3)在 CalculateNumberOflnstances 宏中添加如下节点。这个宏用于获取样条曲线的长度,并将其除以 Space Between Instances 变量,以找到将沿着样条曲线创建的实例数量。Floor 节点用于向下取整的除法的结果。 
提示:如果除法运算中的分母为零,将会导致运行错误,产生一个结果为 0 的异常。蓝图中有一个名为 Safe Divide 的节点,如果分母为零,则返回零,但它不会产生错误。

4,编写构造脚本

(1)切换至 Construction Script 选项卡,添加相关逻辑节点。由于节点较多,这里分为左右两部分显示。下面是左侧部分的节点:
  • 我们获取存储在静态网格体变量中的静态网格体,并将其设置为由实例化静态网体格组件使用的静态网格体。
  • For Loop 节点将根据 Number Of Instances 进行循环。我们通过将 ForLoop 节点的当前 Index 乘以 Space Between Instances 变量来计算沿样条曲线的距离。 

(2)下面是右半部分节点:
  • Add Instance 节点将使用从样条曲线接收的位置和旋转,在关卡上添加一个静态网格体实例。
  • 需要注意, Coordinate Space 必须是本地的,需要在 InstanceTransform 参数上右击,在快捷菜单中选择“分割结构体引脚”命令。

5,使用测试

(1)从内容浏览器中拖动 BP_SplinePlacement 并将其放到关卡中。 

(2)我们可以通过添加、平移和旋转样条点来创建路径。静态网格体实例将沿着样条曲线自动添加。
评论

全部评论(0)

回到顶部