本文是对UE官方教程:https://www.bilibili.com/video/BV1eU4y1c7XL的重现,原教程中通过构造函数实现非运行时执行脚本,并通过UE的样条线组件辅助创建路径网格体。该功能最终实现的效果如下:
1.创建基础蓝图
首先创建一个Actor蓝图对象,我们使用InstancedStaticMesh组件构建动态网格以提升性能,挂载组件如下:
UE蓝图中的构造函数一直比较冷门,可能很多时候都不会去用,其实在编辑器状态下,它可以在拖入场景并且修改参数时执行,从而运行一些非运行时下的逻辑。
我们增加模板网格变量,添加一个Static Mesh组件,并调用函数初始化到InstancedStaticMesh上:
2.设置间距并随样条线生成
2.1 得到生成物件的宽度与间隙
第二步,我们需要拿到模板网格的BoundingBox并以此为基础计算间距,计算间距的蓝图逻辑如下:
但是实际生成的时候也不能紧贴着创建,还需要加一个Offset变量以制造间隙:
到这一步,我们加了2个变量Offset和Spacing,Offset用于制造生成物的间隙,Spacing储存生成物件宽度。
2.2 得到样条线的长度并计算生成数
然后我们需要拿到样条线的总长度,并以此除以生成物件的宽度,这样就可以得到生成物体的数量了:
拿到生成物体的数量,可以创建一个For循环节点,调用添加实例函数:
这时可以把Actor拖到场景里看下效果:
拖拽一下样条看下效果,已经基本可以生成了,但是没有旋转信息。接下来我们继续更迭,增加旋转的适配。
3.增加生成物件的旋转信息
我们用下一个生成物件的坐标和当前生成物件的坐标相减就可以得到一个矢量作为物体朝向,首先需要将获得位置的蓝图节点封装进函数,便于后续操作:
然后调用2次这个函数,得到旋转朝向,蓝图节点如下:
这样我们的蓝图逻辑就全部完成了,看下效果: