使用蓝图和渲染目标创建高度场绘制器

使用蓝图和渲染目标创建实时高度场绘制器的教程。

Windows
MacOS
Linux

HFP_Header_Image.png

提高和降低各种表面的能力可以实现各种有趣和独特的游戏元素。在接下来的教程中,我们将介绍如何使用蓝图和渲染目标来创建一个高度场绘制器,当玩家向一个对象射击时,该高度场绘制器会抬高对象的表面。为了实现这一点,我们将首先创建和设置一个新的游戏模式和HUD蓝图,这将允许用户与高度场绘制器互动。然后我们将创建和设置所需的渲染目标和材质。最后,我们将创建一个蓝图,将所有单独的部分连接在一起,由此生成一个可以提高对象表面的蓝图,它被应用到虚幻引擎4(UE4)内部。

1 - 项目设置

在开始之前,我们需要创建一些资源作为项目设置的一部分。

在开始为高度场绘制器创建和设置必要的Actor之前,我们首先需要创建和设置一个 游戏模式覆盖(Gamemode Override)。在下面部分,我们将介绍如何在您的项目中实现这一点。

如果您使用的是 内容示例(Content Examples) 贴图,那么您可以跳过这一步,使用 我的游戏(MyGame) 游戏模式。该游戏模式位于 内容(Content) > 蓝图(Blueprints) > 我的游戏(MyGame) 下。

HFP_PS_00.png

创建新的游戏模式和HUD

为了看到十字准星,让用户知道他们在朝哪里射击,我们需要创建和设置新的游戏模式和HUD蓝图。在下面部分,我们将介绍如何完成所有这些设置,以便能使用高度场绘制器。

  1. 内容浏览器(Content Browser) 中右键单击,并在菜单中的 创建基础资源(Create Basic Asset) 部分中,单击 蓝图类(Blueprint Class) 选项。 

    HFP_BP_Setup_00.png

  2. 选取父类(Pick Parent Class) 窗口中,单击 游戏模式(Game Mode) 选项,将新的游戏模式命名为`HighFieldPainterGameMode`。

    HFP_PS_01.png

  3. 再次在内容浏览器(Content Browser)中右键单击,弹出创建基础资源(Create Basic Asset)菜单,然后单击 蓝图类(Blueprint Class) 选项。

    HFP_BP_Setup_09.png

  4. 显示选取父类(Pick Parent Class)窗口时,展开 所有类(All Classes) 选项,并将 HUD 输入到搜索框中。查找 HUD 选项,找到后单击它,然后按 选择(Select) 按钮以创建它。

    HFP_PS_02.png

  5. 将新创建的HUD蓝图命名为`HeightFieldPainterHUD`,然后双击 **HeightFieldPainterGameMode** 蓝图打开它。

    HFP_PS_04.png

  6. 在 HeightFieldPainterGameMode 的 细节(Details) 面板的 类(Classes) 部分下,将 HUD类(HUD Class) 设置为刚创建的`HeightFieldPainterHUD`蓝图。

    HFP_PS_03.png

  7. 现在,编译(Compile)保存(Save) HeightFieldPainterGameMode蓝图,然后在内容浏览器中双击HeightFieldPainterHUD蓝图以打开它。

    HFP_PS_05.png

  8. 在HeightFieldPainterHUD蓝图内,转到 事件图表(Event Graph) 并将以下蓝图代码复制粘贴到图表中。

    Copy Node Graph

    HFP_PS_06.png

    别忘了编译(Compile)并保存(Save)您的蓝图,以便使用它。

    该蓝图代码告诉HUD绘制指定的材质,使该材质在游戏运行时会在玩家的屏幕上居中。要查看所有设置是否正确,按下 运行(Play) 按钮运行游戏,您现在应该在屏幕的中央看到一个十字准星(如下图所示)。

    HFP_PS_07.png

如果您没有在屏幕上看到十字准星,请检查确保 Draw Material 节点上的 材质(Material) 输入中已经输入了一些内容: 

HFP_PS_08.png

现在已经创建了关卡和HUD,在下一部分中,我们将看看需要创建哪些资源以及如何设置它们。

2 - 必要的资源创建和设置

在创建高度场绘制器蓝图之前,我们需要在UE4内容浏览器中创建和设置以下资源类型。在下面部分,我们将介绍如何设置每个资源以及需要注意的任何特殊属性。

请注意以下内容并不特定于任何UE4项目类型。以下内容可以在任何使用UE4 4.13或更高版本的项目中完成。

  • 渲染目标(Render Target)

  • 材质(Material)

  • 蓝图(Blueprint)(基于Actor)

渲染目标创建和设置

  1. 内容浏览器(Content Browser) 中右键单击,并从显示的菜单中转到 创建高级资源(Create Advanced Asset) > 材质和纹理(Materials & Textures),然后选择 渲染目标(Render Target) 选项。

    HFP_RT_Creation_00.png

  2. 将新创建的渲染目标命名为`RT_Height_Filed_Painter`,然后按 **保存所有内容(Save All)** 按钮保存您的工作。

    HFP_RT_Creation_01.png

材质创建和设置

  1. 在内容浏览器(Content Browser)中右键单击,并从 创建基础资源(Create Basic Asset) 列表中选择 材质(Material) 选项以创建一个新材质,并将其命名为`MAT_HeighfieldPainter`。

    HFP_Material_Creation_00.png

  2. 在内容浏览器(Content Browser)中选择该 MAT_HeightfieldPainter 材质,然后右键单击它。从显示的菜单中,在 常见(Common) 部分下,选择 复制(Duplicate) 选项以创建该材质的副本,将其命名为`MAT_ForceSplat`。

    HFP_Material_Creation_01.png

  3. 右键单击MAT_HeighfieldPainter材质打开它,然后选择 主材质节点)Main Material Node)。在 细节(Details) 面板中的 材质(Material) 部分下,设置以下参数。

    • 着色模型(Shading Model):无光照(Unlit)

    HFP_Material_Creation_04.png

  4. MAT_HeighfieldPainter材质将使用 世界场景位置偏移(World Position Offset) 输入以增加其应用到的静态网格体顶点的Z高度。您可以将鼠标悬停在下面的图像上,然后单击 复制表达式图表(Copy Expression Graph) 选项,将提供的材质代码复制粘贴到`MAT_HeighfieldPainter`中,从而将该材质设置复制到您的材质中。

    Copy Expression Graph

    HFP_Material_Creation_05.png

    别忘了应用(Apply)并保存(Save)您的材质,以便使用它。

  5. 打开MAT_ForceSplat材质,然后选择 主材质节点(Main Material Node)。在 细节(Details) 面板中的 材质(Material) 部分下,设置以下参数。

    • 混合模式(Blend Mode):Additive

    • 着色模型(Shading Model):无光照(Unlit)

    • 允许Negative Emissive Color(Allow Negative Emissive Color):勾选(Checked)

    HFP_Material_Creation_02.png

  6. 由于MAT_ForceSplat材质将作为我们的绘制笔刷来提高我们的高度场的表面,需要几个选项来允许您控制它的大小和强度。您可以将鼠标悬停在下面的图像上,然后单击 复制表达式图表(Copy Expression Graph) 选项,将提供的材质代码复制粘贴到MAT_ForceSplat中,从而将完成的材质复制到您的材质中。

    Copy Expression Graph

    HFP_Material_Creation_03.png

    完成后别忘了应用(Apply)并保存(Save)您的材质,以便使用它。

现在已经设置了所需的资源,在下一部分中,我们将了解如何创建一个蓝图,该蓝图将把所有资源链接在一起,以创建高度贴图绘制器。

3 - 蓝图设置

设置渲染目标和所需材质并准备就绪后,现在是时候使用蓝图把所有的东西整合起来了。在下面部分,我们将介绍如何设置高度场绘制器蓝图的所有不同部分。

蓝图创建和变量设置

  1. 在内容浏览器(Content Browser)中右键单击,并在菜单中的 创建基础资源(Create Basic Asset) 部分中,单击 蓝图类(Blueprint Class) 选项。

    HFP_BP_Setup_00.png

  2. 选取父类(Pick Parent Class) 窗口中,选择 Actor 并将其命名为`HeightFieldPainter`。

    HFP_BP_Setup_01.png

  3. 右键单击HeightFieldPainter蓝图打开它,然后单击 事件图表(Event Graph) 选项卡。打开事件图表(Event Graph)后,添加以下变量。

    HFP_BP_Setup_02.png

    变量名称

    变量类型

    默认值

    HeightfieldRT

    纹理渲染目标2D

    N/A

    PainterMaterialInstance

    动态材质实例

    N/A

    MouseDown

    布尔

    N/A

    ForceSplatMID

    动态材质实例

    N/A

    InteractionDistance

    浮点

    1000.0

    BrushSize

    浮点

    0.04

    BrushStrength

    浮点

    1.0

组件设置

组件(Components) 选项卡中,按 添加组件(Add Component) 按钮并将一个 静态网格体(Static Mesh) 组件添加到蓝图。添加静态网格组件(Static Mesh Component)之后,选择该静态网格组件(Static Mesh Component)并设置以下选项。

HFP_BP_Setup_06.png

部分

属性

所需资源

变换

移动性(Mobility)

N/A

Movable(可移动)

静态网格体

静态网格体(Static Mesh)

SM_Plane1000_512

N/A

材质

材质(Material)

HeightfieldPainterMaterial

N/A

碰撞

生成重叠事件(Generate Overlap Events)

N/A

勾选(Checked)

碰撞

碰撞预设(Collision Presets)

N/A

OverlapOnlyPawn

构造脚本设置

除了创建和分配所需的动态材质实例外,构造脚本还用于创建和分配2D渲染目标。如果还没有那样做,单击 构造脚本(Construction Script) 选项卡,然后将以下代码复制到蓝图构造脚本中。

Copy Node Graph

HFP_BP_Setup_03.png

Trace from Camera函数设置

实施此函数有两种方法。第一种方法需要一些数学知识,主要适用于平面或其他平整表面。第二种方法使用 Find Collisoin UV 节点,它需要使用更多内存,但是可以跨任何 静态网格组件(Static Mesh Component) 工作,无论其形状如何(UV接缝仍然会导致瑕疵)。您可以在下面选择实现方法。

选择实现方法

Method 1

Method 2

Trace from Camera函数将被用来确定静态网格体上应增加高度的位置。它通过将玩家摄像机中心的光线投射到世界场景中来确定这个位置。当这条射线与一个静态网格体相交时,相交位置就是要凸起的位置。要设置`Trace from Camera`函数,需要执行以下参数。

  1. 单击 函数(Functions) 选项卡上的小(白色)加号,创建一个新函数,并将其命名为 TraceFromCamera

    HFP_BP_Setup_04.png

  2. 打开TraceFromCamera函数,将鼠标悬停在下面的图像上,然后单击 复制表达式图表(Copy Expression Graph) 选项,选择代码,复制它,然后将其粘贴到TraceFromCamera函数中,从而将以下蓝图代码复制到您的蓝图中。

    Copy Node Graph

    HFP_BP_Setup_05.png

    别忘了编译(Compile)并保存(Save)您的蓝图,以便使用它。

事件图表设置

既然已经创建并设置了所有需要的部分,现在就可以将事件图表中的所有不同部分连接起来了。您可以将鼠标悬停在下面的图像上,然后单击 复制节点图表(Copy Node Graph) 选项,将提供的蓝图节点代码复制粘贴到您的高度场绘制器蓝图中,从而将完成的蓝图代码复制到您的蓝图中。

Copy Node Graph

HFP_BP_Setup_07.png

复制粘贴蓝图代码时,不会将 Event Begin Play 节点添加到图表中。确保添加Event Begin Play节点,并将其连接到 启用输入(Enable Input) 输入。

HFP_BP_Setup_08.png

现在所需的蓝图已经设置好了,在下一部分中,我们将讨论如何在UE4中使用高度贴图绘制器。

要使用此方法,您必须在编辑器中启用 支持来自命中结果的UV(Support UV from Hit Result) 功能。有关如何做到这一点的信息,请参阅从追踪获取UV坐标

  1. 单击 函数(Functions) 选项卡上的小(白色)加号,创建一个新函数,并将其命名为 TraceFromCamera

    HFP_BP_Setup_04.png

  2. 打开TraceFromCamera函数,将鼠标悬停在下面的图像上,然后单击 复制表达式图表(Copy Expression Graph) 选项,选择代码,复制它,然后将其粘贴到TraceFromCamera函数中,从而将以下蓝图代码复制到您的蓝图中。

    Copy Node Graph

    HFP_BP_Setup_01.png

    别忘了编译(Compile)并保存(Save)您的蓝图,以便使用它。

事件图表设置

既然已经创建并设置了所有需要的部分,现在就可以将事件图表中的所有不同部分连接起来了。您可以将鼠标悬停在下面的图像上,然后单击 复制节点图表(Copy Node Graph) 选项,将提供的蓝图节点代码复制粘贴到您的高度场绘制器蓝图中,从而将完成的蓝图代码复制到您的蓝图中。

Copy Node Graph

HFP_BP_Setup_02.png

复制粘贴蓝图代码时,不会将 Event Begin Play 节点添加到图表中。确保添加Event Begin Play节点,并将其连接到 启用输入(Enable Input) 输入。

HFP_BP_Setup_08.png

现在所需的蓝图已经设置好了,在下一部分中,我们将讨论如何在UE4中使用高度贴图绘制器。

4 - 最终结果

现在,高度场绘制器蓝图所需的所有部分都已经设置好了,是时候看看高度场绘制器的实际操作了。在下面部分,我们将介绍如何在UE4项目中使用高度场绘制器。

使用高度场绘制器蓝图

  1. 在内容浏览器(Content Browser)中找到高度场绘制器蓝图,然后将其拖动到您的关卡中,根据关卡的需要确定其位置。

    HFP_BP_Use_00.png

  2. 按主工具栏上的 运行(Play) 按钮,然后引导您的玩家,使他们位于放置于关卡中的高度场绘制器蓝图的前方(或非常接近该高度场绘制器蓝图)。

    HFP_BP_Use_01.png

最终结果

若要提高表面位置的高度,使十字准星处于所需位置,请按住鼠标左键以提高静态网格体的高度。如果移动鼠标的时候一直按住鼠标左键,就会持续提高静态网格体的高度。如果全部正确设置完毕,您应该看到类似于以下视频的内容。

这只是使用蓝图和渲染目标操纵静态网格体顶点的方法之一,而创造的可能性几乎是无止境的。从创建可以使玩家和环境变形的影响效果,到允许玩家对他们所处的世界场景产生真实的影响,高度场绘制器蓝图可以适应许多不同的游戏角色和需求。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback