|
在 UE4 中,您可让静态网格模型做很多事情,比如在游戏过程中改变其贴图或材质,或者使用 Matinee 在整个场景中移动。有可能您不介意静态网格模型在场景中的行为方式如何,但是就是不希望玩家能够穿过网格模型或射穿网格模型。这时候,对静态网格模型进行碰撞设置就非常有用了。
设置
您可能已经有了一个自己创建的场景和静态网格模型。如果您已经有了上述条件,可以忽略此步骤。如果您还没有创建上述条件,则要启动 UE4 新建一个项目。对项目进行命名并选择项目的存储位置。在本示例中,我们将使用蓝图的第一人称模板。 您不一定要使用该模板,但是该模板中已有的射击抛射物功能将用于在下文中的某处进行演示,因此使用该模板可以帮助您跟着说明顺利操作下去。
另外还要确保启用了 Starter Content。如果未启用该选项,您将无法使用本“操作指南”的后续步骤中要用到的资源,那就很难跟着继续操作下去了。
<img
球体简单碰撞胶囊简单碰撞盒状简单碰撞
在设置碰撞后,如果您仍然看不到网格模型周围的轮廓,请确认工具栏中的碰撞按钮 (
) 已高亮显示。另外还请注意,如果您已经在网格模型上设置了简单碰撞,然后在该网格模型上添加了另一个简单碰撞,则新的碰撞不会取代另一个碰撞,而是会添加在其上。如果您添加了上述所有三个简单碰撞,而没有删除任何碰撞,则可能会看到下图所示的效果。
要解决这个问题,您可选择其中一个碰撞,然后按 delete 键,或从 Collision 下拉菜单中选择 Delete Selected Collision 逐一删除碰撞,或者也可在 Collision 菜单中选择 Remove Collision 以删除网格模型上的所有碰撞。这时将出现一个弹出窗口,询问您是否确定想要删除所有碰撞网格模型。单击 Yes 将删除静态网格模型上的碰撞。
<img class="right" class="right " alt="RemoveCollisionPopUp.png[/img] src="https://docs.unrealengine.com/latest/images/Engine/Content/Types/StaticMeshes/HowTo/SettingCollision/RemoveCollisionPopUp.jpg[/img]
在网格模型上应用碰撞之后,请注意,碰撞带有转换小工具。在设置了碰撞之后,您可对碰撞网格模型进行转换、旋转和缩放,就像对 UE4 内的任何其他对象进行的操作一样。
较复杂网格模型上的碰撞
如果您的网格模型很容易就可以放入胶囊或盒子里,或您的网格模型不需要精确碰撞,则使用上一部分中设置的简单碰撞就足够了。但是,您的网格模型可能带有比较复杂的形状,而且需要精确碰撞。在本部分中,我们将介绍如何进行设置。
回到 Starter Content 内的 Props 文件夹,浏览至静态网格模型 SM_Chair。然后 Double-click 缩略图,在静态网格模型编辑器中打开它。就像您看到的那样,该网格模型上已经有了碰撞,其外观类似下图所示:
我们假设在此示例中,我们想让玩家能够坐在椅子的座垫上。在碰撞网格模型的默认设置下,会有看不见的障碍物阻止玩家坐到座垫上。(请注意,当玩家在玩游戏时,他们只会看到静态网格模型本身,而不是碰撞网格模型,因此玩家会尝试坐到椅子上,却不知道为什么有东西阻止他们。)
选择编辑器顶部 Collision 下拉菜单中的 Remove Collision,删除网格模型上的碰撞。我们尝试使用本“操作指南”前一部分中使用的基础形状,但是如下所示,他们的外观都不是我们想要的。
球体简单碰撞胶囊简单碰撞盒状简单碰撞
基础形状的效果都不是我们想要的。但是,我们可以通过 Collision 下拉菜单中的其他选项来做一些调整,使其符合我们的要求。这些选项称为 K-DOP 简单碰撞生成器。K-DOP 是一种包围体,代表 K 离散型多面体(其中,K 代表轴对齐平面数量)。通常,它将 K 个轴对齐平面尽量推向网格模型。产生的形状被用作碰撞的外壳。在 Static Mesh Editor 中,K 可以是:
10 - 盒体,4 条边带有斜角 - 您可选择 X- Y- 或 Z 轴对齐边。
18 - 盒体,所有边都带有斜角。
26 - 盒体,所有边和角都带有斜度。
以下分别展示了 10-DOP、18-DOP 和 26-DOP 设置下的椅子网格模型。
10DOP18DOP26DOP
这些碰撞网格模型已经越来越接近我们想要的效果,但是,座垫周围还有一些间隙,可能会阻碍玩家坐在椅子上。再次选择 Remove Collision,完成后,选择 Collision 下拉菜单中的 Auto Convex Collision。完成上述操作后,将出现 Convex Decomposition 面板,如下所示。
该窗口的顶部选项是 Accuracy,该选项在构建碰撞网格模型时,将尽量少生成基础形状。底部选项 Max Hull Verts 将增加或减少碰撞网格模型的顶点数。这些值越高,您的碰撞精度就会越高,但是碰撞网格模型也会越复杂。单击 Apply 将对网格模型应用这些设置。
默认设置最高精度与最多外壳顶点数
另一种设置复杂碰撞的简单方法是:使用多个简单形状碰撞网格模型来创建网格模型的碰撞。如果您还记得本“操作指南”前文中提到的内容,那您一定知道创建另一个简单碰撞网格模型不会取代原有的网格模型,只会添加到原有网格模型上。前文中还提到过:每个碰撞网格模型都有各自的转换小工具,您可借助它对各碰撞网格模型进行转换、旋转和缩放。我们可以使用这种方式来为静态网格模型创建碰撞。
选择 Collision 下拉菜单中的 Add Box Simplified Collision,Left-click 碰撞网格模型,调出转换小组件。对碰撞网格模型进行转换、旋转和缩放,使其贴合椅子扶手一直到地面的轮廓。在碰撞网格模型仍被选中的情况下,复制碰撞网格模型,方法是选择 Collision 下拉菜单中的 Duplicate Selected Collision,或者按 Ctrl + W。移动该碰撞网格模型,使其贴合椅子的另一条扶手的轮廓。再次复制网格模型。选中这个新的网格模型,对其进行移动、缩放和旋转,使其贴合椅子的底部。复制该碰撞网格模型,将其向上移动,以贴合椅子的座位。再次复制网格模型,对其进行旋转,以贴合椅子的靠背。上述操作全部完成后,您将可以看到类似以下画面的效果:
您也可以回过头来再对网格模型进行调整,使其更贴合椅子的形状。在本示例中,我们仅用了这 5 个盒体就为整个椅子设置了碰撞,而之后玩家就可以坐在座垫上了。
模拟物理属性与碰撞预设设置
在静态网格模型上设置了碰撞之后,现在就可以模拟物理属性了。单击静态网格模型编辑器工具栏最左侧的 Save 按钮,保存椅子网格模型,然后在 Content Browser 内找到 SM_Chair。将网格模型的副本拖动到场景中,并在选中该副本的情况下,看一下 Details 面板。在 Details 面板的 Physics 部分中,第一个选项为 Simulate Physics,该选项的默认设置为 false。如果您在 “Simulate Physics” 选项设为 false 的情况下进行场景的游戏,则人物将无法穿过网格模型,且射击抛射物也根本不会影响网格模型。
停止在场景中游戏,然后将 Simulate Physics 设为 true。此时如果进行游戏,您将看到当人物走入椅子时,网格模型会移动。在场景中,对椅子射击时,椅子也会飞到空中。这不仅是因为网格模型在模拟物理属性,也因为网格模型的默认 Collision Preset 设为 “block all”。
返回到椅子的 Details 面板,在 Collision 部分中将出现一个名为 Collision Presets 的下拉菜单。网格模型的实例对游戏世界中其他对象做出反应的方式取决于它的 Collision Presets 设置。请看一下下图所示的选项。
默认设置为 “Block All”。如果您将其设为 “Overlap All”,则在游戏开始时,您将看到网格模型出现穿出到场景之外的错误。还有一个自定义预设设置,使用该设置可手动设置网格模型对场景中其他对象的反应方式。您可能想要它阻挡 Pawn,但是重叠抛射物,并忽略所有其他对象。在自定义预设设置中,您可设置网格模型执行上述行为。既然您已经对网格模型设置了碰撞,您现在就可以将其放置在场景中,并使用其碰撞来设置网格模型影响场景中其他对象的方式,以及受场景中其他对象影响的方式。
|
|