本文为学习安宁Ken的UE4Spline的记录

介绍

UE4 Spline_缩放

UE不太支持别的软件导入的样条线

一般直接在场景里编辑曲线而不是在蓝图里编辑曲线

只能创建一个Spline Component,然后将这个Actor拖到场景里

添加点:右键添加或者alt+拖动现有点

Curve Linear Constant

每个节点有很多数据,节点上方向(用于确定唯一旋转),进入的切线,离开的切线等等

会用到的相关蓝图函数

UE4 Spline_右键_02

SplineGenerationPanel

可以快速生成一些线段,包括圆弧、圆环等

有的面好像不太好生成,并不好用目前看,貌似xz yz平面不太好生成

编辑器中使用SPline

Construction Script节点,当前对象在场景中实例化一次便会执行一次这个节点,比如把这个actor拖到场景中,可能会触发很多次(拖的时候),我们对它做任何修改或者对组件做任何修改,动一下位置,也会导致这个节点执行,其不需要游戏运行起来就能触发,很适合做一个摆放工具之类的,按照一些规则进行生成

复制摆放

vector变量等可以在场景中有一个3D widget的可视化方案

Truncate节点去除小数部分

思路:固定距离去取曲线上的点(GetTransformatDistanceAlongSpline),每次编辑曲线都回执行construct script,这个脚本里就给取的点的位置添加一个StaticMeshComp,并对这个StaticMeshComp指向的Mesh资源进行一个指向

UE4 Spline_缩放_03

在关卡界面对指向的资源模型和进行赋值

UE4 Spline_4s_04

效果:那就打个问号吧

UE4 Spline_4s_05

给以这个Transform的location或者rotation一些随机可以得到一些沿着曲线但是有点偏移的效果,模型也可以有缩放

注意点

这里使用AddStaticMeshComp生成了一堆的Comp,多个Comp对应了多个drawCall,这种模型很显然可以进行合批操作的

UE是有对应的Component的,InstancedStaticMeshComponent,一开始先创建好,然后对这个InstancedMeshComp进行AddInstance

UE4 Spline_赋值_06

UE4 Spline_赋值_07

这么多问号才10+drawcall

小技巧

可以右键节点选中所有曲线点,然后使用对齐方案,比如键盘上的End键,来进行向下对齐,适用于不平整的路面,曲线的控制点数需要多一点

制作道路管道桥梁

Spline Mesh Actor

使用曲线去扭曲一个静态模型让其达到一个变形的情况,管道一类的需要模型的面数较高,分段要多

里面起作用的是一个SplineMeshComp组件

这样的话我们创建一个新的Actor,然后根据复制摆放的原理,遍历曲线的每一段segment,每有一段就创建一个SplineMeshComp,设置他的Trasform的值(每一段获取起始点和终止点的location和tangent值,可以的话set up vector at spline Point把UpVector也计算一下以避免弯曲过大产生的两面不接的bug),首尾相接 便可以做出随着Spline变化的管道了

UE4 Spline_4s_08

注意UE的For Loop蓝图节点是<=的判定而不是<

管道的UV应该是铺满的,这样子才可以很好的tiling

变化的时候也可以设置mesh的材质、mesh的碰撞

经验:模型的断面一般朝向x方向,不容易产生太多旋转扭曲的截面bug