Choose your operating system:
Windows
macOS
Linux
假如能以较低的开销添加来回晃荡的缆绳或锁链,仿佛被风吹动一般,那么虚幻引擎4(UE4)的项目会更加栩栩如生。本文将介绍如何使用 缆绳组件(Cable Component) 插件创建和控制缆绳的外观、响应方式,甚至是让它和关卡中的物体发生碰撞。
模拟和渲染
在模拟线缆的实际效果时,我们用到了游戏开发中的一项经典技巧—— 韦尔莱积分算法(Verlet Integration) 。这种算法的理念是用一系列粒子来表示缆绳,且粒子之间拥有 距离约束 。两端的粒子 固定不动 ,只跟随它的绑定对象移动。中间的粒子则 自由移动 ,随重力下垂。在每一步(积分)中,每个粒子的速度和位置都会更新,并相应移动以满足约束。缆绳的 刚性 由我们(每步)强制执行约束时采用的迭代次数决定。
生成完粒子锁链后,我们需要对它进行渲染。渲染缆绳时,将创建一个名为 FCableSceneProxy 的类来表示缆绳的渲染效果。粒子的两端的位置(在主线程上的 TickComponent 中执行)会通过 SendRenderDynamicData_Concurrent 函数传递给此代理。接下来,更新(update)会在渲染线程锁定,之后将更新索引和顶点缓存,进而生成一个 管状 网格体。管状网格体上的每个顶点都要计算一个位置、一个纹理UV 和三个切线基础(Tangent Basis)向量。执行此操作时, X轴 的方向同缆绳, Z轴 垂直缆绳表面(相当于法线),而 Y轴 则与 X轴 和 Z轴 垂直。这些属性对组件公开,以便用户控制面的数量,管状的半径、以及 UV 沿缆绳进行平铺的次数。
启用插件
缆绳组件插件会默认启用。如未启用,可在主工具栏中选择 编辑(Edit) > 插件(Plugins) 。然后在插件列表中选择 Rendering ,勾选 Cable Component 的 Enabled 勾选框。
使用缆绳组件
可以两种不同方式将缆绳组件添加到项目关卡。在以下部分,我们将说明为项目关卡添加缆绳的两种不同方法。
用放置Actor面板添加缆绳组件
如需使用放置Actor面板添加缆绳组件,请执行以下操作:
-
首先确保 放置Actor(Place Actors) 面板为显示状态,然后在 Search Classes 框中输入
Cable
。 -
如要将缆绳 Actor 添加到世界场景,请选中"放置Actor"面板中的缆绳 Actor 并将其拖入关卡。
-
现在便可放置、旋转和缩放缆绳 Actor,使其满足关卡的需求。
在蓝图中使用缆绳组件
如需在蓝图中使用缆绳组件,请执行以下操作:
-
首先新建一个名为 BP_Cable 的蓝图,它的父类是 Actor 。
-
然后在 BP_Cable 蓝图的 Components 分段中点击 Add Component 按钮,然后在列表中找到 Cable 组件。找到组件后,点击将其添加至组件列表。
-
添加缆绳组件后,在组件列表中选择 Cable 组件以便在 细节 面板调整其属性。将其他设置保留为默认,然后编译并保存蓝图。
取消勾选缆绳组件细节面板中的 Attach Start 或 Attach End 选项,即可使缆绳的任意一头下坠。此操作可在游戏运行时开展。
-
在 Content Browser 中找到缆绳蓝图,然后将其拖入关卡。放置后,即可使用移动和旋转工具根据需求调整位置。
在缆绳末端附加物体
你可以在缆绳的任意一端附加物体,使其沿缆绳晃动。需要执行以下步骤在 UE4 中实现此功能:
-
首先需要添加一个 缆绳 Actor 和一个 静态网格体 到关卡中。
必须将附加到末端的静态网格体的 Mobility 设为 可移动(Moveable) 。
-
在世界大纲视图中,找到需要附加到缆绳 Actor 末端的静态网格体,然后将其拖至缆绳 Actor 的上方。执行此操作后将显示以下输入窗口。
-
选择 Cable End 选项,即可在视口中看到静态网格体附着到缆绳 Actor 的末端。
-
在关卡中选中缆绳 Actor。然后在 Details 面板的 Cable 部分中,取消勾选 Attach End 框。
注意: Attach Start 和 Attach End 选项并非将缆绳附加到 Actor 的唯一方法。也可指定一个用作附着点的套接字。
-
执行此操作后,缆绳便能在视口中自由回荡。
注意:可在运行时开启/关闭 Attach Start 和 Attach End 两个布尔值,制造出一些有趣的效果。
碰撞和刚性
启用碰撞(Collision)和刚性(Stiffness)将极大增加缆绳 Actor 的开销。建议只在以下情况下启用:缆绳需要和场景中的物体碰撞,或需要为缆绳赋予刚性以获得更佳效果。如无此类需求,则最好将这些选项禁用,以降低开销。
缆绳组件有一个选项可让缆绳和场景对象发生碰撞,并控制缆绳的刚度。为启用此功能,请按以下步骤操作。
-
首先,在缆绳组件细节面板的 Cable 分段中按下白色小三角形,展开高级选项。
-
勾选 Enable Stiffness 和 Enable Collision 选项启用这些功能。
-
现在,当缆绳 Actor 或物体相遇时,应该会发生碰撞效果。
属性详解
下表详细说明了缆绳组件上的每个属性:
Cable
属性名称 |
描述 |
---|---|
Attach Start |
修复到物体的头端,或放任不管。如为 false,组件变形只用于缆绳头端的初始位置。 |
Attach End |
修复到物体的末端(使用 AttachEndTo 和 EndLocation),或放任不管。如为 false,AttachEndTo 和 EndLocation 只用于缆绳末端的初始位置。 |
Attach End To |
定义缆绳最终位置的 Actor 或组件。 |
Component Property |
附加缆绳的组件属性的命名。 |
Attach End To Socket Name |
进行附加的 AttachEndTo 组件上的套接字命名。 |
End Location |
缆绳的最终位置,如经指定则相对于 AttachEndTo(或 AttachEndToSocketName),否则则相对于缆绳组件。 |
Cable Length |
缆绳的静止长度。 |
Num Segments |
缆绳拥有的分段数量。 |
Solver Iterations |
解算器迭代的数量,控制缆绳的刚度。 |
Substep Time |
控制缆绳的模拟分步时间。 |
Enable Stiffness |
为缆绳添加刚性约束。 |
Enable Collision |
在每个分步为每个缆绳粒子执行清扫,避免与世界场景发生碰撞。使用组件上的 Collision Preset 决定碰撞的对象。这会极大提高缆绳模拟的开销。 这在当前版本中仍为实验性功能。 |
Cable Forces
属性名称 |
描述 |
---|---|
Cable Forces |
应用到缆绳中所有粒子的力向量(世界空间)。 |
Cable Gravity Scale |
应用到此缆绳的世界重力比例。 |
Cable Rendering
属性名称 |
描述 |
---|---|
Cable Width |
缆绳几何体的宽度。 |
Num Sides |
缆绳几何体的面数。 |
Tile Material |
沿缆绳长重复材质的次数。 |
其他参考资料
以下为外部参考资料,你可借此获得缆绳组件的更多见解。阅读 Thomas Jakobsen 的文章,了解 韦尔莱积分算法 的更多详情。