65.9K
CodeProject 正在变化。 阅读更多。
Home

虚幻5蓝图(你好,世界)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2022年6月28日

CPOL

11分钟阅读

viewsIcon

11971

Epic Games 最近发布了 Unreal Engine 5,我认为是时候写一个关于使用蓝图来展示 UE5 强大功能的系列文章了。

在这个系列文章中,我将从 Unreal Engine 5 的基础开始,向您介绍蓝图,然后逐步学习使用蓝图创建我们自己的游戏。我不会回顾如何安装 Unreal。我已经看了很多 Unreal 教程,其中前二十分钟都在详细介绍下载和安装过程,不必要地重复 Epic Games 的内容。您可以在这里获取下载,并按照视频中的说明进行安装。

注意:您需要一个 Epic Games 账户才能安装 Unreal。

什么是蓝图?

Unreal Engine 有一个名为蓝图的可视化脚本系统。这是一个系统,允许我们使用一种称为节点式界面的东西来创建和配置游戏玩法元素。

这些节点使我们能够执行诸如触发和响应事件、使用变量或执行操作等任务。

入门

安装好 Unreal 后,您可以通过 Epic Games 启动器启动它,所以请打开它并点击 启动 按钮来打开 Unreal。

注意:该按钮是一个下拉菜单,因为可以安装不同版本。

Unreal 启动后,您将看到 Unreal 项目浏览器。在这里,您可以打开现有项目或创建一个新项目。点击游戏图片以打开游戏选项。

为了致敬所有好的编程教程,我们将从一个 Hello World 项目开始,所以让我们将项目名称更改为 HelloWorld

我们可以从多种不同的模板中选择,例如创建空白项目、第三人称射击游戏等。不同的选择会提供一些不同的默认操作,例如 FPS 的玩家角色。目前,我们将选择一个空白模板。

我将保持所有其他选项不变。蓝图按钮仅仅意味着我们最初想将项目创建为蓝图项目而不是 C++ 项目。如果需要,以后可以将蓝图添加到 C++ 项目中,也可以将 C++ 添加到蓝图项目中。入门内容提供了一些初始内容,以便我们有一些东西可以查看。我取消了勾选,因为我想从头开始。

点击 创建,项目即创建完成。可能需要几秒钟,有轻微延迟是正常的。即使我们说不要内容,项目也会自带一个地形和一些灯光。

在此阶段,我查看的大多数教程都会花时间介绍编辑器构成窗口。我不会这样做,而是在遇到它们时介绍窗口。

视口导航

窗口的主要区域,显示地形的部分,被称为视口。默认情况下,Unreal 打开的是透视视口。在后续教程中,我们将学习如何使用不同的视口配置来更精细地控制模型。

按住鼠标左键并移动鼠标,视口中的图像会向相应方向旋转。您可以使用箭头来放大或缩小,以及将视口向左或向右移动。

在进行任何更改之前,我们应该保存我们的关卡。为此,请从 文件 菜单中选择 另存为当前关卡...

执行此操作后,系统会提示您保存关卡。我将我的关卡命名为 Earth

添加内容

在我将自己的内容添加到此项目之前,我想删除项目创建时添加的大部分默认内容。屏幕的右侧有一个大纲视图(Outliner)选项卡,其中包含已添加的每个项目的引用。我将删除大多数可见项,所以我会在大纲视图中选择以下项(点击键盘上的 删除 按钮进行删除)。要删除所有地形项,您需要展开 landscape 文件夹。

如果您想知道为什么我们没有删除 HLOD 文件夹中的内容,这是因为这些是 Unreal 自动创建以提高运行时性能的项。它们通过用单个元素替换单独的网格来在远处进行渲染。这里的条目是从地形元素创建的,旨在减少 Unreal 在远距离渲染的细节量。当我们构建此关卡时,它们将自动删除,因为它们所基于的地形元素已被删除。

删除元素后,请务必保存项目。您可以使用 文件 菜单并点击 保存全部,或者使用快捷键 Ctrl + Shift + S

制作我们的世界

我确实承诺过我们会做一个 Hello World 练习,说到做到,我们要“制作”的世界是 Earth。在本教程中,我将下载“2K Earth daymap”图像以用于球体,所以请继续并从这里下载图像。

添加 Earth 纹理非常简单。点击屏幕底部的 内容浏览器

Content Drawer button.

将显示内容浏览器窗口,我们将点击 导入 来开始导入世界图像的过程。

在文件对话框中选择世界图像,这会将地图作为纹理加载到项目中。

虽然我们已经加载了地球纹理,但我们想将其转换为材质,以便在渲染最终地球时使用。右键单击内容浏览器中的纹理,然后从上下文菜单中选择 创建材质

保存项目以确保所有工作都已保存,然后通过选择 构建 菜单然后点击 构建所有关卡 来构建关卡。

Build all levels

Unreal 将提示我们询问此时要执行什么操作。我将选择删除 HLOD 条目。

确保在 保存内容 对话框中选中所有内容,然后点击 保存选定项

根据您机器的性能,构建过程可能需要一些时间。请耐心等待它完成构建。

提高效率提示:在处理 Unreal 时,我们将花费大量时间在内容浏览器窗口中。如果您希望浏览器始终可用,您可以将内容浏览器添加为页面上的一个停靠项。为此,请从 窗口 菜单中选择 内容浏览器 选项。

在开始创建蓝图之前,我们还有最后一件事要做。我想将地球材质添加到球体上,这意味着我想将一个球体添加到屏幕上。我将视口切换到建模模式。在工具栏中,我点击 选择模式 下拉菜单,然后从可用选项列表中选择 建模

屏幕的左侧显示一个垂直工具栏,其中包含我可以执行的模型操作,旁边有一个建模窗格。在 形状 部分选择 球体

在视口中的任意位置左键单击以完成添加球体,然后点击 完成 按钮。如果您不点击 完成,Unreal 会允许您添加更多球体。不要忘记保存您的工作。

添加蓝图

我们正在构建一个世界,所以让我们的世界旋转是一个好主意。如果一个球体我们无法看到它的所有侧面,那有什么意义呢?

我们将使用工具栏中的 蓝图 按钮打开蓝图编辑器。

注意:您创建的每个关卡都已关联一个蓝图。您无法创建新的关卡蓝图,只能与已有的蓝图进行交互。

由于我们要为旋转的行星创建一个蓝图,我们点击菜单中的 新建空蓝图类... 选项。在未来的教程中,我将展示创建蓝图的其他方法。现在我们应该看到一个允许我们选择父类的对话框。

此时,值得指出的是,一个 blueprint 类(我们缩写为 blueprint),只是一个我们可以用来添加功能的资产。它们构建在现有的游戏类之上,因此它们继承了这些类的特性,并允许我们覆盖它们以添加我们特定需求的函数和能力。这应该能帮助您理解我们将要选择的是我们将要使用的基础功能,所以这将是我们的蓝图的父类。由于我们将处理一个可以放置在关卡中的对象,我们将选择 Actor 作为我们的父类。将弹出一个对话框,要求我们为蓝图命名。在此示例中,我选择了 RotatingEarth 作为名称。

此时将显示蓝图编辑器。这是一个单独的窗口,因此您可以在工作时将其移动到另一台显示器。同样,我不会解释此窗口的不同部分。在未来的教程中,我们将根据需要深入探讨不同的部分。

我将通过将球体添加到我的蓝图中来开始这个蓝图。这是我想旋转的东西,所以这是需要添加的东西。为此,我将点击 添加 按钮,然后从下拉菜单中选择 静态网格体 选项。这将允许我添加我想旋转的网格体。

要添加旋转功能,我再次点击 添加,但这次,我将搜索 旋转移动

现在我的蓝图中添加了两个组件。我还没有做的一件事是,将我的球体添加到静态网格体中。点击组件窗口中的 StaticMesh,该组件的详细信息将出现在 Details 视图中。在静态网格体中,点击带有 None 的下拉菜单(我已在下方用红色高亮显示)。

球体网格体将有一个随机名称,但由于它是我的关卡中唯一的网格体,因此很容易识别。

在下面的 材质 部分,选择 None 下拉菜单,然后选择我们在上面部分创建的材质。

在添加我们的旋转地球之前,我们需要编译我们的蓝图,以便它可以使用。点击工具栏中的 编译 按钮。

编译蓝图后,关闭蓝图编辑器窗口并保存您的工作。

注意:如果您关闭 Unreal 并重新打开,您可能仍会看到默认内容。如果看到,这意味着地球关卡未打开,因此您需要通过 文件 > 打开关卡 来打开关卡编辑器,然后在其中选择 Earth 关卡。

最后的步骤

尽管我们使用添加的球体网格体添加了一个旋转地球蓝图,但您会发现视口中的球体看起来不像在旋转的地球。要解决此问题,我们首先做一些可能被认为是适得其反的事情。选择球体网格体(通过在视口中或在大纲视图中单击它),然后将其删除。

添加旋转行星是一个简单的过程,即使用内容浏览器(如果您没有将其停靠在编辑器中),如果您没有将其停靠在编辑器中,请使用内容抽屉显示内容浏览器。点击 Blueprints 文件夹以显示旋转的 Earth

选择 RotatingEarth Actor,然后将其拖到 viewport 中。

我们所要做的就是保存我们的进度,然后从 构建 菜单中选择 构建所有关卡 命令。将出现与本教程前面看到的相同的构建屏幕。

您已准备好测试关卡,所以点击工具栏中的 播放 按钮,然后使用鼠标和 W、A、S、D 键在视口中移动。

注意:我知道地球纹理看起来不太对。我们通常会采取一些步骤来处理我们在此教程中未涉及的网格体和球体。在以后的教程中,我们将学习如何正确地对球体进行纹理处理。

希望您喜欢本教程。这是我计划的系列的第一篇。那些担心我不会继续我的 TypeScript 系列的人,请不用担心。我也会继续进行那些教程。

我已将此教程的存储库添加到 Github。有任何问题,请随时在评论中提问。

© . All rights reserved.