UE4中制作自动延伸平铺路面(SplineMesh和Spline的应用)附工程下载
前言
在虚幻的地形管理器中,提供给了道路铺设功能!我们可以使用道路铺设在地形中完美制作地形道路!
但是如果在开发中,我们只需要铺设道路而不使用地形创建是否可以完成呢?本篇文章将介绍如何将地形中的道路铺设通过编写逻辑的方式设计完成!这不仅可以帮助我们铺设道路,也可以用来铺设栅栏,铁轨,管道等。
本篇教程适用于制作连续的Mesh铺设工作!即,使用同一Mesh进行规则平铺!效果如图一,此工作直接在编辑窗口进行编辑即可!属于场景编辑工作!如果你希望动态生成路面(也就是运行时态生成,这也是可以的,但是地面贴合度可能会不尽人意)也是可以的!
实现结果
- 路面可以无限平铺延展
- 路面可以弯曲上扬
如果你有这种诉求,可以试试本篇文章的方法!
准备
首先平铺的Mesh如果是需要弯曲的,那么Mesh必须增加布线。弯曲本身将Mesh中的顶点进行了偏移,如果Mesh顶点过少,则会出现弯曲怪异甚至无法弯曲的情况(模型定点数少则过度生硬,越多越圆滑)。我使用的是官方的道路Mesh,大家可以观察下Mesh的布线。
如果你希望平铺是有柔滑的转弯,Mesh布线参照图二,否则弯曲可能会非常怪异!
步骤
(一)构建路面Actor
路面Actor是用来在场景中管理路面的对象,当此Actor被拖入场景中,我们可以通过编辑Actor获得铺设路面。
右键资产目录,创建蓝图,继承自AActor即可
(二)添加SplineComponent组件
Spline组件是虚幻提供的路径组件,我们可以借助此组件编辑路径!路径内容包括位置,旋转,缩放信息!我们可以使用Spline组件构建怪物移动路径,特效飞行路径,摄像机移动路径等。如果你需要编辑一条路径即可使用此组件。
Spline是通过记录多个空间点信息(位置、旋转、缩放),借助贝塞尔曲线或是线性进行位置信息存储!使用时,从A点到B点中的路径均是计算获得!计算方式由A点的类型决定(线性和曲线两种方式)
类型只有选中Spline中的点才可以在细节面板中看到(图三)
- Linear 当前选中点后的路径为线性路径
- Curve 当前选中点类型为曲线,切线自动生成,永远是此点的正切线
- Constant 当前选中点后路径无,直接到下一个点位置
- CurveClamped 限制切线数据,只能在当前点的前后点之间游走
- CurveCustomTangent 自定义切线,只要填写切线数据或是调整切线臂,则类型自动变为此项
说明:
- Spline默认有两个节点(起始点,终点)
- Spline节点添加需要选中任意一节点,在编辑界面中按住Alt键,鼠标拖拽移动指示剪头即可创建新的节点加入,参照图四
- Spline节点弯度调整需要节点类型为曲线类型(使用贝塞尔曲线进行构建),参照图四
(三)构建SplineMesh组件
SplineMesh才是真正的主角!他的意图可以通过首尾两个点,加切线,将Mesh进行弯曲拉伸制作!结合Spline使用,可以非常灵活的构建自动平铺Mesh
蓝图截图
逻辑进行描述
上述蓝图编写在Actor的构造事件图标中(Construction Script)。当此对象发生变化时(内在数据),构造函数将被调用!借助Spline,循环Spline上所有点,如果有3个点,则需要添加2个SplineMesh(3个点确定两个线段)。循环添加SplineMesh,设置SplineMesh的起始点,起始切线,末尾点,末尾切线。即可将SplineMesh和Spline结合在一起!
图五说明
- A中的ForLoop注意,此循环会包含Last值,即如果First为0,Last为1,则循环2次,而非一次!所以B中对Spline节点减2操作(否则将多添加一段SplineMesh)!
- C中加一操作,每次铺设均使用当前点和下一个点的信息
- D设置,如果没有将创建的SplineMesh添加到当前的Actor中,则此选项设置为World(获取的将是世界坐标)
- D节点既是创建SplineMesh组件的节点
(四)设置SplineMesh组件信息
注意
- 设置Mesh信息,遵从准备中对于Mesh的要求
- 设置前向轴,使用Mesh的哪个轴向作为前向轴(Forward Axis)
- 调整路面朝向,使用当前组件的本地轴(Spline Up Dir)
工程源码:链接: https://pan.baidu.com/s/180w9m4-wVjFF-8I-D1J2VQ 密码: npub
虚幻版本 V4.20.1
很有用的SplineComponent!