原文:
zh.annas-archive.org/md5/78FAB97D380A66E356B2945CC4E249E8
译者:飞龙
前言
第一个虚幻引擎于 1998 年由 Epic Games 推出。这个引擎的一个很棒的特性是,由于 UnrealScript 的存在,引擎在社区中变得非常受欢迎,因为它使得修改变得非常容易和可访问。然后,在 2002 年,Epic 发布了他们的下一个引擎,虚幻引擎 2,这是对第一个引擎的巨大改进。它带来了一个叫做 UnrealEd 2(后来是 UnrealEd 3)的东西,这本质上是一个您可以用来为虚幻创建关卡的关卡编辑器。这个编辑器,再加上 UnrealScript,可以用来创建全新的游戏。该引擎提供了比其前身更好的渲染、物理和碰撞。它还支持当时的主机,即 PlayStation 2,Xbox 和 GameCube。2006 年,Epic 发布了他们的下一个,也可能是他们最受欢迎和广泛使用的引擎,虚幻 3。这在技术上是一个巨大的飞跃。这是虚幻引擎开始蓬勃发展的地方。然而,虚幻引擎 3 提供的最重要的功能可能是 Kismet。Kismet 是一个非常强大的可视化脚本工具。它的工作方式是有各种节点,可以连接起来形成一个逻辑序列,有点像流程图。Kismet 最好的部分是您不需要任何编程知识。您可以使用 Kismet 在不写一行代码的情况下制作整个游戏。对于艺术家和设计师来说,这是一个非常方便的工具,因为他们可以快速制作原型或者在自己身上尝试某个功能,而不必依赖程序员。
现在我们来到了更加现代的时代。2012 年 2 月,Epic 推出了虚幻 4,最终于 2014 年 3 月 19 日发布。虚幻引擎 4 自 2003 年以来一直在制作中。这个引擎比以前的引擎有了很大的进步。首先,它完全删除了 UnrealScript,并用 C++替换了它。在早期的虚幻版本中,如果您想修改引擎以开发游戏,您必须使用 UnrealScript 来进行修改,这意味着要学习一种新的语言。但是现在,如果您希望修改引擎,可以使用 C++来进行修改。对于引擎程序员来说,这是一个巨大的改进,因为这意味着他们可以使用他们已经了解和喜爱的语言来修改和调整任何他们希望的东西。
不仅如此,引擎的源代码也可以供开发者使用,并可以从 GitHub 存储库中下载。这意味着开发者对引擎拥有完全控制权,可以调整几乎任何东西,包括物理、渲染和用户界面。
它还提供了一个叫做热重载的功能。通常,当您想要在游戏的代码中进行更改时,您必须停止游戏,进行所需的更改,然后再次运行游戏以查看其对游戏的影响。然而,使用热重载功能,您可以在不停止或暂停游戏的情况下进行游戏中的更改。您对游戏代码所做的任何更改都会立即更新,您可以实时看到其效果。
您还可以在虚幻 4 上为各种平台开发游戏,包括 Xbox One,PlayStation 4(包括 Project Morpheus),Windows PC,Linux,Mac OS X,HTML 5,iOS 和 Android。它还支持 Oculus Rift。
Epic 做出的另一个重大改变是针对较小的独立开发者的许可模式。更具体地说,要许可虚幻开发工具包(UDK),即虚幻引擎的先前版本,开发者必须支付 99 美元的许可费,以及公司从销售中获得至少 5 万美元后的 25%的版税。然而,在虚幻 4 中,他们已经改变了结构。截至 2015 年初,虚幻引擎 4 现在完全免费下载和使用。没有许可费,没有订阅,什么都没有。您可以下载它,在其上开发游戏,并发布它,而不需要在引擎上花一分钱。只有在收入超过 3000 美元后,您才需要支付 5%的版税。
虚幻 4 提供的另一个很棒的功能是市场。市场是一个很好的地方,可以购买和上传资产。这些资产可以是动画、3D 模型、材质、音效、预制游戏等。这对于渴望成为开发者的人来说也是个好消息,他们没有资源或人力来开发这些资产。他们可以简单地从市场上购买所需的资产,并在他们的游戏中使用。开发者还可以将自己的作品上传到市场并赚取一些钱。
这本书面向对虚幻引擎 4 几乎一无所知的初学者,它涵盖了如何使用虚幻引擎 4 开发 Android 游戏的内容。本书将涵盖您开始所需了解的一切。从最基础的,比如如何下载和安装引擎,到更高级的,比如如何将完成的产品上传到 Google Play 商店,都将涵盖在内。我们将通过逐步制作我们自己的游戏来实现这一点。每一章都可以被视为制作我们游戏的一步。本书的结构使得每个后续章节都是前一章节的延续,给读者一种流畅的感觉。
本书也不会使用任何其他软件(除了 Android SDK),这样读者就不必先下载大量软件来准备好,而是专注于引擎。所有资产,如材料、静态网格等,都将是引擎本身提供的。
本书涵盖了什么内容
第一章,“虚幻 4 入门”,教您如何下载和安装虚幻引擎 4 和启动客户端。
第二章,“启动虚幻引擎 4”,讨论了项目是什么,如何创建新项目,编辑器是什么,它的用户界面以及一些您应该了解的快捷键。
第三章,“制作游戏-第一步”,涉及 BSP 刷子,教您如何使用它们来阻挡关卡,如何在材质编辑器和内容浏览器中创建材质,以及如何在 UE4 中使用灯光。
第四章,“使用角色、类和体积”,介绍了模式面板中提供的各种类型的类。这包括基本类、视觉类和体积,以及如何将它们实现到我们的游戏中。
第五章,“使用蓝图进行脚本编写”,介绍了如何使用蓝图在游戏中进行脚本编写。脚本编写是 UE4 的重要方面,因为没有互动性的游戏实际上不是游戏。我们还将介绍最常用的蓝图类型。
第六章,“使用虚幻 Matinee”,介绍了 UE4 提供的另一个强大工具,Matinee。我们将使用 Matinee 来创建游戏中必不可少的过场动画和其他动画。
第七章,“完成、打包和发布游戏”,完成了一个完全功能的游戏后剩下的唯一事情。那就是最终确定游戏,打包并在 Google Play 商店上发布游戏。
附录,“接下来做什么?”,建议您从这里开始。它涉及各种可以找到文档和教程以进一步发展您在 UE4 中技能的地方。
您需要为本书准备什么
为了阅读本书,您需要:
-
虚幻引擎 4
-
Android 开发工具包
本书的主要目的是尽可能少地使用软件,这样您只需专注于引擎,而不必先下载大量其他软件和程序来准备。
这本书适合谁
本书面向那些对如何使用虚幻引擎 4 一无所知,并希望使用它开发 Android 游戏的开发人员。
惯例
在本书中,您会发现一些文本样式,用于区分不同类型的信息。以下是一些这些样式的示例,以及它们的含义解释。
文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄显示如下:“下一步是完成游戏,将其打包成.apk
文件,并将其发布到 Google Play 商店。”
任何命令行输入或输出都将按如下方式编写:
keytool –genkey –v –keystore -*name of your project*.keystore –alias *alias_name* -keyalg RSA – keysize 2048 –validity 10000
新术语和重要单词以粗体显示。您在屏幕上看到的单词,例如菜单或对话框中的单词,会以这样的方式出现在文本中:“从主页,点击屏幕右侧的获取虚幻按钮。”.
注意
警告或重要说明会出现在这样的框中。
提示
提示和技巧会出现在这样。
第一章:使用虚幻 4 入门
问候!如果您拿起了这本书,很可能您对使用 UE4 在 Android 设备上开发游戏感兴趣。本书将解释您使用 UE4 所需的一切。从最基础的,如下载和安装软件,到更高级的,如打包您完成的游戏并将其移植到您的 Android 设备上,本指南将覆盖一切。您可以在 UE4 上为各种平台开发游戏,但我们将专注于 Android 平台。
在这个介绍性的章节中,我们将涵盖以下主题:
-
UE4 及其提供的功能
-
下载和安装 UE4
-
引擎启动器及其用户界面
-
指南中的预期内容
预期内容
学习如何使用游戏引擎可能是一项艰巨的任务;您可能不知道从何开始,UE4 也不例外。然而,一旦您掌握了它,您很快就会发现它实际上是多么强大和直观。有什么比通过实际制作游戏来教您如何使用游戏引擎更好的呢?本书将教会您所有您需要知道的内容,以便您能够使用 UE4 在 Android 平台上开发游戏,并在此过程中制作一个真正的可玩游戏。背后的原因很简单;仅仅谈论 UE4 提供的功能并逐一演示它们并不是学习如何开发游戏的有效方法。然而,如果有人通过在游戏中实现这些功能来解释它们,那将更加有效,因为您将更好地理解每个功能如何影响游戏和其他功能。
在本指南中我们要制作的游戏叫做Bloques,这是一个第一人称解谜游戏,玩家的主要目标是解决一系列的谜题以便继续前进。随着玩家的进展,谜题会变得越来越复杂和难以解决。至于游戏的范围,它将包含四个房间,每个房间都有一个谜题,玩家必须解决才能进入下一个房间。
选择解谜游戏的原因是解谜游戏在脚本编写和关卡设计方面有更复杂的系统。在本指南中,诸如蓝图脚本编写和关卡设计等内容将通过解谜游戏得到更好的展示。尽管游戏将在随后的章节中得到详细解释,但游戏特性的高级概述如下:
-
一个完全渲染的可玩 3D 环境,有四个房间。
-
交互式环境元素。
-
玩家必须解决每个房间中的一系列谜题,以便进入下一个房间。随着玩家的进展,谜题变得更加复杂和难以解决。
-
游戏将被优化并移植到 Android。
这本指南旨在为 UE4 奠定基础,使您能够进一步建立知识,并真正有能力开发您一直想要制作的游戏!
最后的建议是实践!教程和指南只能做到这么多。其余的取决于您。真正掌握 UE4,或者任何东西,唯一的方法就是实践。不断尝试,制作小型原型,保持与最新的发展和新闻保持联系,并与社区互动。
系统要求
在您开始下载 UE4 之前,您首先需要确保您的系统能够运行它!UE4 适用于 Windows 和 Mac OS X。以下是每个系统的系统要求:
-
Windows 7/8,64 位(或 Mac OS X 10.9.2 或更高版本)
-
.NET 4.0
-
DirectX 10(Mac:OpenGl 3.3)
-
8 GB 的 RAM
-
四核英特尔或 AMD,2.5 GHz 或更快
-
NVIDIA GeForce 470 GTX 或 AMD Radeon 6870 HD 系列或更高
-
至少 9 GB 的硬盘空间(Mac OS X 为 8 GB)
下载和安装 UE4
下载和安装 UE4 的过程非常简单;只需按照以下步骤进行:
- 转到虚幻的官方网站(
www.unrealengine.com/
)。主页看起来像下面的截图:
关于 UE4,您需要了解的一切都可以在这里找到,包括最新消息、引擎的最新版本、博客更新、最新的市场条目等等。从 2015 年开始,该引擎已经免费下载。
除了 UE4 主页,建议您访问docs.unrealengine.com/latest/INT/
。这里有关于如何使用 UE4 的文档和视频教程。Epic 拥有一个庞大、活跃且友好的社区,总是愿意通过论坛帮助面临问题的任何人。
注意
您可以通过在主页上悬停在社区标签上直到菜单下拉,然后点击论坛来访问论坛,或者您也可以简单地访问forums.unrealengine.com/
寻求帮助。或者,您也可以通过访问answers.unrealengine.com/
来寻求AnswerHub的帮助。
-
从主页上,点击屏幕右侧的获取虚幻按钮。点击它将带您到订阅页面,如下所示:
-
要下载和安装 UE4,您必须创建一个账户。要创建一个 Epic Games 账户,只需填写所需信息,并按照说明操作。
-
要下载引擎启动器,只需登录。在您的账户页面上,您可以访问您的个人资料、账单历史、以前的交易等。
-
现在您已经设置好了账户,您可以下载 UE4。根据您的设置,您可以下载 Windows 版本或 Mac 版本。要下载,在最新下载下,点击下载按钮,您将下载引擎启动器。
-
要运行安装程序,只需双击UnrealEngineInstaller-版本号.msi(如果您使用 Windows)或UnrealEngineInstaller-版本号.dmg(如果您使用 Mac)。按照步骤安装引擎启动器。
-
安装完成后,运行启动器。您应该会遇到以下屏幕。
这是登录界面。只需输入您用于订阅的电子邮件地址和密码,然后点击密码旁边的箭头按钮或按Enter键,即可登录。
- 登录将打开引擎启动器。我们将在稍后详细讨论它及其功能,但现在,您只需要点击库,然后点击引擎旁边的添加版本按钮。这样将创建一个插槽。您可以使用版本下拉菜单在您添加的版本插槽中选择一个版本号,然后您可以点击安装按钮,您选择的 UE4 版本将开始下载。
就是这样!您现在已经在您的 PC(或 Mac)上下载并安装了 UE4。要启动引擎,只需点击启动器左上角的启动按钮,下面是账户名称,然后您就可以开始了。如果需要,您还可以启动以前的引擎版本。点击启动按钮旁边的向下箭头将打开一个菜单,列出了所有的引擎版本,要启动它们,只需点击您希望运行的版本。
或者,您也可以点击库按钮,从那里选择要运行的引擎。您系统上安装的所有版本都将列出,您可以通过点击启动按钮来简单地启动列表中的任何版本。
但是等一下!在我们准备开始使用 UE4 之前,我们还有一些事情要讨论。让我们快速看一下目录结构。
Windows 目录结构
UE4 的默认安装位置是C:\Program Files\Unreal Engine\
。您可以在安装过程中更改此位置。打开目录后,您会发现每个引擎版本都有自己的单独文件夹。比如,您在系统上安装了 UE4 的 4.1、4.2 和 4.3 版本。您将找到所有三个版本的单独文件夹,即4.1
、4.2
和4.3
。以下截图将让您更好地了解:
每个引擎版本都有自己的文件夹。除此之外,还有另外两个文件夹,即DirecXRedist
和Launcher
。
Windows DirectXRedist
DirectXRedist
是DirectX
文件的存放位置。该文件夹还包含安装文件,您可以从中安装DirectX
。
启动器
Launcher
文件夹包含引擎启动器的所有文件。Launcher
文件夹包含以下子文件夹:
-
Backup
:UE4 具有一个出色的功能,可以让您创建工作的备份。如果开发人员犯了一个无法修复或难以修复的错误,或者引擎在开发过程中崩溃,那么他们不需要重新做所有的工作,他们的工作备份将存储在Backup
文件夹中,这样他们可以从上次离开的地方继续。 -
Engine
:该文件夹包含构成引擎的所有代码、库和内容。 -
PatchStaging
:偶尔,Epic 会发布新版本的 UE4。截至 2015 年,最新版本是 4.7.6(撰写时可用预览版本 4.8)。在下载过程中,当前下载版本的所有数据都存储在PatchStaging
文件夹中。 -
VaultCache
:稍后将在本章中解释,您现在需要知道的是,您在市场上购买的所有内容都包含在Vault中。VaultCache
包含所有已购买项目的缓存文件。
4.X 文件夹
在我们讨论4.X
文件夹之前,您应该知道 UE4 的所有版本(4.1、4.2、4.3 等)都是相互独立的。这意味着您不需要先前的版本来运行后续版本。例如,如果您希望运行 4.4 版本,那么您不需要下载 4.0、4.1、4.2 和 4.3 版本来运行它。您只需下载 4.4 版本并使用它而不会出现任何问题。这就是为什么 Unreal 4 的每个版本都有一个单独的文件夹的原因,每个版本都被视为一个独立的实体。
所有4.X
文件夹,虽然分开,但包含相同的子文件夹集,因此它们被分组在一起。以下是子文件夹:
-
Engine
:类似于启动器的Engine
文件夹,其中包含构成引擎的所有源代码、库、资产、地图文件等。 -
Samples
:UE4 有两个示例地图,Minimal Default 和 Starter Map。该文件夹包含所有内容,包括资产、蓝图等。 -
Templates
:UE4 提供各种类型游戏的模板,例如第一人称、第三人称、2D 横向卷轴、俯视等。每种类型的所有内容和源代码都包含在这里。
引擎启动器
引擎启动器是在运行引擎后打开的窗口。它充满了对您非常有用的功能和资源。首先,我们将看一下引擎启动器的用户界面、其分解、所有位置、功能等。
打开引擎启动器后,您将看到以下窗口:
在左上方有三个标签,虚幻引擎,虚幻竞技场和堡垒之夜。默认情况下打开的是虚幻引擎标签,其中包含了您在上一张截图中看到的内容。
虚幻竞技场标签是您可以找到有关最新《虚幻竞技场》游戏的信息和链接的地方。
如前所述,Epic 的最新项目《虚幻竞技场》是一个项目,Epic 接受并鼓励社区的内容,比如武器皮肤、玩家皮肤、关卡等。在这里,您可以下载最新的《虚幻竞技场》,购买其他社区成员创建的内容,以及获取有关《虚幻竞技场》的所有最新新闻和更新。
最后一个标签是堡垒之夜标签。Epic 目前正在进行另一个项目,即《堡垒之夜》。
在撰写本文时,Alpha 版本可用。您可以注册参与,并向开发人员提供反馈,以及从该标签访问官方 Facebook 页面、Twitter 页面、Instagram 账户和 Twitch 直播。
在右上角的面板上有两个按钮,好友列表按钮和设置按钮。当您点击好友列表按钮时,它会打开一个窗口,您可以在其中管理好友列表,比如添加和删除好友,查看谁在线等等。您还可以将自己的状态设置为在线或离开。
下一个按钮是设置按钮,在这里您可以找到关于引擎启动器的某些选项,比如访问支持页面,查看启动器日志,退出启动器等等。
在左上方是启动按钮,如前所述,它会启动引擎。在它下面有几个面板,每个面板包含不同的内容。让我们逐个查看这些面板。
新闻
新闻面板包含有关 UE4 和 Epic 的所有最新新闻和更新。从这里,您可以访问有关当前/最新版本 UE4 的最新文章,市场发布的最新内容,有关特定主题的最新教程系列,Twitch 回顾等等。这是了解 Epic 和 UE4 周围事件的最佳途径。
注意
新闻部分定期更新,因此建议定期查看新闻部分。
学习
正如名称所示,这里是您可以找到有关 UE4 的所有教程和文档的地方。学习部分提供视频教程,比如如何使用蓝图,书面教程,其中包含有关如何使用 UE4 的逐步说明,最后还有游戏内容示例,这些是已经设置好的项目文件,包括关卡、灯光、资源以及蓝图脚本,这样您可以亲自看到每个部分的作用并进行实验。
在学习部分的顶部有三个按钮,分别是文档,视频教程和社区维基。点击文档会将您发送到 Epic 官方的虚幻引擎 4 文档页面,涵盖了诸如如何使用编辑器、蓝图、Matinee 等各种主题。
视频教程按钮将带您到 Epic 的视频教程页面,所有内容都被整齐地分类。每个类别都有一定数量的系列。一个系列包含一系列涵盖特定主题的视频教程。例如,蓝图类别目前有六个系列,包括介绍、如何创建库存、第三人称游戏创建等。
最后,社区维基是一个活跃的维基页面,人们可以在上面发布教程、代码、项目、插件等。这是获取用户内容和找到其他开发者创建的教程的好方法。值得一提的是,Epic 目前正在开发他们的最新项目,虚幻竞技场。这个标题的一个很棒的地方是,他们也接受并实施社区创建的内容。这包括开发核心游戏功能、关卡、角色、枪支、HUD 图形等。
注意
如果您有兴趣为项目做出贡献或对整个项目感兴趣,只需转到维基的虚幻竞技场部分,它将为您提供有关项目的所有必要信息。在此之下,是各种基于类型分类的教程,您可以查看/下载并了解更多关于 UE4 及其功能的信息。
市场
市场是开发人员可以购买资产的地方。缺乏人力或资源来创建资产的开发人员可以购买并在他们的游戏中使用它们。这些包括网格、材料、动画集、绑定的角色、音频文件、音效、项目和教程等。市场中的某些项目,例如 Epic 自己的项目是免费的。它们主要是教程项目文件,已经设置了一个示例关卡来展示 UE4 提供的各种功能。这些项目文件还设置和实施了所有的关卡蓝图,以便用户可以看到它们,并进行实验,直到他们掌握它。市场中的其他项目,由用户创建,需要付费。您可以购买的资产根据内容类型进行了整齐的分类,以方便您选择。
除了购买资产,您还可以在市场上提交自己的内容并从中赚取一些钱。在市场屏幕右上角点击提交您的内容超链接将打开 Epic 的提交页面。提交页面包含有关提交内容的所有信息。
它还有市场业务条款,其中包含有关销售收入分成、如何获得付款、何时获得付款等所有信息。它还有市场提交指南,解释了提交流程、需要提交的内容、截图的分辨率等。您还可以通过在论坛上发布内容来获取有关提交流程的更多信息和反馈。
库
库是列出所有 UE4 版本、所有项目和您从市场购买的所有项目的地方。让我们仔细看一下。
库有 3 个部分,引擎版本、我的项目和保险库。引擎版本部分显示当前安装在您系统上的所有 UE4 版本。您可以从这里启动引擎的任何版本。此外,您还可以下载最新版本或以前的版本。要这样做,只需点击面板顶部的添加版本,就在引擎版本旁边。点击它将为您想要下载的版本创建一个插槽。
如前一屏幕截图所示,点击添加版本按钮会创建一个用于最新版本的虚幻 4 的插槽,本例中是 4.8.0(尽管只是预览版本)。要下载,只需点击下载按钮,它就会开始下载。
此外,你可以删除你不需要的 UE4 版本。例如,如果你有最新版本,你可能希望删除之前或旧版本的引擎,以在硬盘上腾出空间。要做到这一点,只需将光标悬停在版本槽的左上角,直到看到一个x。一旦看到x,只需点击它,相应版本的 UE4 将被卸载。另一种卸载的方法是点击启动旁边的向下箭头按钮,这将打开一个下拉菜单;从中选择删除,引擎启动器将卸载该版本。
图书馆的第二部分是我的项目部分。在这个部分,你创建的所有项目都会显示出来。
项目按字母顺序分类。右上角是搜索栏。在上面的截图中,项目文件相对较少;因此,很容易找到特定的项目。但是,如果你有很多项目,可能会更难找到你要找的项目。在这种情况下,你可以在搜索项目选项卡中输入你需要的项目名称,它会帮你找到它。
在项目缩略图的右下角,你可以看到项目是在哪个版本的引擎中创建的。例如,在上面的截图中,项目Effects是用 UE4 的 4.0 版本创建的。如果你打开该项目文件,启动器将启动 UE4 的 4.0 版本。然而,如果你没有相应的版本,那么在启动项目时,你将被要求选择你希望在哪个已安装的版本中启动项目文件。在做出选择后,它将把项目转换为与你选择的版本兼容,并启动它。然而,在转换项目时要小心,因为可能会出现一些意外问题。建议在转换之前创建项目的备份副本。
要启动一个项目,双击缩略图。除了打开一个项目,你还可以执行其他操作。右键单击缩略图会打开一个菜单。点击删除将删除相应的项目。点击克隆将创建项目文件的副本,点击在文件夹中显示将打开存储在系统上的所有项目文件的文件夹。
最后,还有Vault。你在市场上购买的所有物品都包含在Vault中。
上面的截图展示了Vault的样子以及物品是如何排列的。左边是物品的缩略图,然后是物品的名称。名称下面是该物品占用的空间量。名称下面的蓝色i图标是关于兼容性的信息。将光标悬停在i上会显示该物品与哪些版本的 UE4 兼容。
兼容性也显示在缩略图的右下角,类似于我的项目。让我们以 Vault 中的第一件物品为例,即动画起始包。在缩略图上写着4.4-4.6。这意味着动画起始包与 4.4、4.5 和 4.6 版本兼容。
你可能已经注意到,某些物品有添加到项目选项,而其他物品有创建项目选项。例如,动画包、资产、材料和音频文件可以添加到你已经创建的任何项目中,并且可以在你的级别中使用。项目和展示有创建项目选项。点击它后,它将创建一个项目,并显示在我的项目中,你可以从那里打开它。此外,你可以通过点击向下箭头验证或删除任何项目,并从下拉菜单中选择相应的选项。
UE4 链接
启动器用户界面中的最后一个元素是位于左下角的 UE4 链接。UE4 链接包含指向不同网页的超链接。
让我们仔细看看每一个:
- 论坛:UE4 拥有一个庞大而活跃的社区。论坛是一个很好的地方,可以认识其他开发人员,分享您的想法,展示您的进行中的工作并获得反馈,与其他成员合作开发项目等。
论坛的讨论板按您希望讨论的主题进行了整理。有开发讨论部分,您可以在那里讨论蓝图、动画、渲染、C++游戏编程等。然后是社区部分,您可以展示您的进行中的工作并获得反馈,也可以看到其他人的作品并给予他们反馈。接下来是面向学校的 UE4 部分,专门供学生和教师讨论 UE4 和教育项目。最后是国际部分,您可以与来自您地区的开发人员互动。招募和与他人合作项目变得更加容易和方便,因为几乎所有成员都来自同一地区。
- AnswerHub:有时,您可能会遇到问题或困难,或者有非常具体的问题需要解答,而在任何文档或教程中都找不到答案。在这种情况下,最好的做法是寻求他人和/或 Epic 工作人员的帮助。AnswerHub 是一个很好的论坛,在这里您可以通过 UE4 社区或 Epic 工作人员的帮助解决任何技术或其他方面的问题。要做到这一点,只需登录,发布您的问题,然后等待有人回复。
或者,如果您慷慨的话,您可以通过帮助他人解决可能遇到的任何问题,并在此过程中建立良好声誉,回馈社区。
- 路线图:社区是 UE4 的重要组成部分。Epic 的开发人员希望尽可能地包含社区,并对他们的开发过程进行透明化。这一点在路线图中体现得最为明显。路线图列出了正在开发过程中的功能,并估计了这些功能将何时部署。
Epic 的社交图标位于底部。从左到右,它们依次是:
-
Instagram:您可以关注 Epic 的 Instagram 个人资料,在那里他们发布关于 UE4 的照片和视频,比如环境、活动、材料等等。他们的 Instagram 链接是
instagram.com/UnrealEngine/
。 -
Facebook:点击这个将带您到虚幻引擎的官方 Facebook 页面,在那里,与 Instagram 一样,所有关于 UE4 和 Epic 的更新都会发布。他们的 Facebook 页面链接是
www.facebook.com/UnrealEngine
。 -
YouTube:这将带您到官方的虚幻引擎 YouTube 页面,您可以在那里访问以前的 Twitch 直播、教程等。他们的 YouTube 页面链接是
www.youtube.com/user/UnrealDevelopmentKit/
。 -
Twitter:如果您想在 Twitter 上关注他们,这将带您到官方的 Twitter 页面。官方虚幻引擎 Twitter 账号是
@UnrealEngine
-
Twitch 直播:每周四下午 2 点(写作时),虚幻团队都会有一个 Twitch 直播,在那里他们会讨论最新消息,谈论最新版本的 UE4,新增或修改的功能,并回答观看直播的观众提出的任何问题。
总结
您现在已经迈出了成为 UE4 Android 开发人员的第一步。本章只是冰山一角;还有很多内容需要涵盖。
在这个介绍性的章节中,我们介绍了 UE4 是什么以及 UE4 提供的功能。你还学会了如何下载和安装 UE4。现在你已经熟悉了引擎启动器、它的用户界面和功能。
所有这些话题都为我们接下来的章节提供了一个很好的过渡,我们将在那里讨论编辑器。在我们开始使用它之前,重要的是你知道并理解它是什么,如何浏览它,以及它的用户界面和功能。下一章将专门讨论这些内容。所以,话不多说,让我们继续下一章吧。
第二章:启动虚幻引擎 4
现在您已经知道如何下载和安装 UE4,您应该已经准备好开始制作游戏了。然而,在我们开始制作游戏之前,有一个重要的主题需要讨论,那就是编辑器。编辑器是所有魔法发生的地方。这是您制作游戏的地方。因此,在我们继续之前,您需要了解编辑器、其功能、用户界面以及如何浏览它。因此,本章将带领您了解它。
我们将涵盖以下主题:
-
编辑器是什么
-
它的用户界面
-
浏览编辑器
-
快捷键和控制
遇见编辑器
编辑器是您制作游戏的地方。您为游戏创建的所有资产都是通过编辑器实现的。您可以在编辑器中设置环境和关卡,并且您创建的所有代码序列都可以在这里进行测试;游戏的测试、调试和打包也在这里完成。
毋庸置疑,重要的是您了解编辑器是什么,熟悉其用户界面,并知道如何浏览它,然后我们才能继续。最后,为了提高您的工作流程,您还应该熟悉一些快捷键。
虚幻项目浏览器
当您通过引擎启动器启动 UE4 时,除非您直接从库中打开了一个项目,否则虚幻项目浏览器将会打开。在虚幻项目浏览器中,您可以看到您已经创建的所有虚幻项目的列表,并且您可以打开任何一个您希望的项目。您也可以从这里创建一个新项目。
在下一章中,我们将介绍项目是什么;现在,我们只关注虚幻项目浏览器及其用户界面,如下图所示。
在顶部,标签栏下方有两个标签,分别是项目和新项目。每个标签都包含我们将要介绍的某些功能。
在项目标签中,您可以看到并打开您在系统上存储的任何项目。顶部是搜索栏。如果您有很多项目并且难以找到特定的项目,您可以在搜索栏中简单地输入您希望打开的项目名称,它将显示与您输入的名称匹配的项目。
在搜索栏右侧是刷新按钮。如果您从市场购买了任何内容,它不会反映在浏览器中。要更新项目列表,请单击刷新按钮。刷新按钮旁边是市场按钮;单击此按钮将带您到引擎启动器的市场面板。
在搜索栏下方是我的项目部分;您创建的所有项目都显示在这里。我的项目下方是示例部分。您可以在这里找到可以从市场购买的任何游戏功能示例或引擎功能示例。
如前面的截图所示,目前显示了两个项目。您可能还注意到其中一个项目Test颜色较暗,并且缩略图右下角写着 4.4。这是因为Test项目是使用 4.4 版本创建的,而我们已经启动了 4.6.1 版本。如果我们尝试启动此项目,将会收到提示,提示说此项目是用不同的引擎版本构建的,并将有选项将项目转换为与我们当前运行的 Unreal 4 版本兼容。一旦您转换了项目,它将与您当前的引擎版本兼容。
注意
虽然转换项目升级效果很好,但降级项目(例如,将在 4.6 版本中创建的项目转换为与 4.4 版本兼容)会有一些复杂情况。首先,虽然您可以使用大部分在项目中创建的资产,但无法加载其中创建的地图,并将以完全空白的场景开始。
接下来是示例部分。从引擎特性示例、示例游戏项目等下载的任何内容都会显示在这里。我们之前讨论过的关于项目的升级和降级过程也适用于这些项目文件。
要打开一个项目,只需单击它,选定的项目将被突出显示为黄色。选择后,单击打开按钮启动它。如果您需要打开我的项目部分未列出的项目,只需单击浏览按钮,搜索项目文件并运行它。最后,在窗口的左下角有一个小复选框,上面写着始终在启动时加载上一个项目。如果选中该复选框,下次启动 UE4 时将自动打开您上次打开的项目。
转到新项目面板,我们看到以下屏幕:
正如我们在前面的屏幕截图中看到的,有许多类型的模板可供选择,取决于您想要制作什么类型的游戏。例如,有第一人称游戏、益智游戏、横向卷轴游戏和车辆游戏的模板。有两种类型的模板可供选择,蓝图和C++。蓝图项目不需要用户具有先前的编程经验。所有游戏功能都可以使用蓝图实现,模板还提供了特定游戏模式所需的基本蓝图集,如相机、控制、物理等。然而,C++项目需要开发人员了解 C++。这些项目为特定模板提供了基本框架,开发人员可以在此基础上制作游戏。选择蓝图项目对于缺乏编程知识的开发人员是有益的,提供了开发的便利性。然而,尽管蓝图是一个很好的工具,但它仍然不如编码灵活。通过编码,您可以更好地控制引擎,甚至可以修改它以满足您的需求。这也意味着更好地优化您的游戏。开发人员可以使用蓝图来实现功能,如果他们需要的话。
注意
创建 C++项目时,建议您在系统上安装 Visual Studio 2013 或更高版本。如果没有安装,您需要先下载并安装 Visual Studio,然后才能创建这类项目。但是,您可以使用 Visual Studio 2012,只要您从 GitHub 下载源代码,然后在 Visual Studio 2012 中编译整个引擎。但是,由于引擎启动器是使用 Visual Studio 2013 构建的,建议您安装 2013 版本。如果您使用 Mac,您将需要 Xcode 5 或更高版本。
在项目列表的右侧是突出显示的项目的屏幕截图,下面是对其的描述。
在决定使用哪个模板之后,在打开项目之前,您可以选择一些设置。首先,您可以选择在哪种硬件上开发游戏,PC/游戏机,或移动设备/平板电脑。
这将设置启动项目时的控件等。之后,您可以设置游戏中的渲染质量。您可以选择最高质量或可扩展的选项。尽管您可能希望使游戏看起来令人惊叹,但您必须记住移动设备有限制。在为移动设备开发时,建议选择可扩展。可扩展和最高质量的区别在于,可扩展中引擎配置文件经过优化以提供最佳性能。这意味着一些更昂贵的功能,如抗锯齿和运动模糊,默认情况下被关闭。最后,您可以选择是否要使用起始内容创建项目(起始内容包含材料、道具、音频文件、纹理等)。
一旦您设置了这些选项,您可以设置项目存储的位置。左侧栏显示项目存储的位置和文件夹名称。您可以将其设置为任何您希望的内容。在右侧栏,您可以设置项目的名称。最后,设置好所有这些选项后,只需点击“创建项目”按钮即可打开编辑器。
用户界面
在打开或创建新项目后,编辑器将打开。一旦打开,您将看到以下屏幕:
编辑器是您创建游戏的地方。正如您所见,即使编辑器的用户界面被整齐地分类,仍然有相当多的按钮、菜单和面板。为了更容易地解释用户界面,我们将编辑器分成各个部分,然后逐个讨论每个部分。
标签栏和菜单栏
在顶部,我们有标签栏。就像在互联网浏览器中一样,您可以看到当前打开的所有地图文件的标签,并且可以停靠多个视口。
在标签栏的右侧,您可以看到项目名称以浅灰色写着,例如MyProject2。在项目名称旁边是发送快速反馈按钮,看起来像一个聊天气泡。想给 Epic 关于编辑器的反馈,无论是积极的还是消极的?您可以使用这个按钮。只需点击图标,打开一个菜单,选择发送积极或消极反馈,以及向 Epic 提问。在您做出选择后,会打开一个窗口,您可以选择反馈的内容,然后写下您的想法。在写下您的反馈后,点击发送,它将发送给 Epic。
接下来,我们有显示可用教程按钮,点击后会打开一个窗口,您可以选择想要查看的教程。编辑器本身提供了可用的教程。当您点击按钮时,会打开一个新窗口,显示所有可用的教程。
在标签栏下方是菜单栏。它提供了所有应用程序提供的一般命令和工具。
-
文件:在这里,您可以创建、打开和保存关卡/地图,还可以从这里创建或打开项目(创建或打开新项目时,当前项目将关闭,编辑器重新打开)。您还可以从这里打包游戏。要这样做,只需点击文件,悬停在打包产品上,这将打开另一个菜单,选择要在哪个平台上打包游戏,然后按照说明完成流程。这里有各种设置和构建配置,我们将在后面的章节中介绍。
-
编辑:从编辑菜单中,您可以执行撤消或重做上次操作、剪切、复制、粘贴和/或复制所选对象(或对象组)等操作。您还可以从这里访问编辑器首选项。要这样做,只需在编辑菜单中单击编辑器首选项。这样将打开一个新窗口,您可以在其中设置选项,例如切换自动保存开/关或设置自动保存的频率、更改或分配热键以及更改测量单位(厘米、米或千米)。首选项中还有更多设置可用,因此请随意探索并调整它们以适应您的游戏。
最后,您还可以设置和更改当前打开项目的设置。编辑器首选项的正下方是项目设置选项;单击此选项将打开项目设置窗口。在项目设置窗口中,您可以设置项目描述(包括为项目添加缩略图、添加描述和项目 ID)、游戏的打包方式以及项目支持的平台。
注意
在编辑器首选项和项目设置中有许多设置可以更改和调整以满足您的要求,因此建议您彻底查看它们。
- 窗口:编辑器窗口是完全可定制的。除了选项卡和菜单栏之外,编辑器中的所有其他窗口都可以根据您的喜好进行自定义。在前一节中的屏幕截图是编辑器的默认布局。您可以添加、删除和移动任何您喜欢的窗口。
要这样做,只需按照以下步骤:
-
将光标移动到您希望移动的窗口选项卡上
-
按住选项卡上的左鼠标按钮
-
将窗口移动到您希望移动的位置
-
释放左鼠标按钮,窗口将被设置
有时您可能找不到窗口选项卡。例如,在前面的屏幕截图中,视口没有选项卡。这是因为它的选项卡被隐藏了。要取消隐藏它,只需单击窗口左上角的小黄色箭头。
在上述情况下,Windows 菜单就是为此而设。如果您希望在编辑器中添加另一个窗口,只需打开 Windows 菜单,选择要添加的窗口,然后单击它。这样做后,窗口将打开,您可以将其移动和设置到您想要的位置。如果您使用双屏幕,那么 Windows 菜单可能会很有用,因为您可以添加更多窗口。
- 帮助:Epic 已尽最大努力确保他们和社区提供的教程随时易于访问,无论是在他们的网站上、引擎启动器上还是编辑器本身上。帮助菜单类似于引擎启动器的学习部分(在第一章中有描述,开始使用虚幻 4);它包含有关 UE4 的所有教程和文档的链接。在菜单栏的最右侧是搜索帮助栏。您需要找到特定的教程,而不必浏览整个帮助部分吗?在这种情况下,只需输入您希望找到教程的主题名称,它将显示匹配的结果。
工具栏
接下来,我们有工具栏,位于选项卡和菜单栏的正下方。
它提供了对最常用的命令和操作的快速访问。
-
保存:在最左边是保存按钮。任何开发人员都知道这个功能有多重要。一旦崩溃,所有工作都付之东流;因此,它在工具栏上是可用的,以便您可以快速访问它。
-
源代码控制:从这里,您可以启用或禁用源代码控制,默认情况下为禁用状态。源代码控制是团队合作时的重要工具。这是一种跟踪文件更改并控制软件版本的方法。当对文件进行任何修改时,团队可以检查修改后的文件,并如果他们进行了任何更改,则发布给其他人。
要启用它,请单击按钮,这将打开一个下拉菜单,然后选择连接到源。将打开一个新窗口,要求您选择提供者。选择您想要的提供者,然后单击接受设置。启用后,您可以检查其他团队成员所做的任何修改,并发布您自己所做的任何修改。
-
内容:内容按钮打开内容浏览器。这类似于虚幻引擎 3 中的内容浏览器。因此,如果您熟悉它,您应该不会对新版本有任何问题。对于那些没有使用过虚幻引擎 3 的人,内容浏览器是可以找到所有资产、代码、关卡等的地方。
-
市场:您突然意识到您的游戏需要一个或多个资产;而不是再次打开引擎启动器,只需单击此按钮即可转到引擎启动器的市场部分,您可以浏览和购买所需的项目。
-
设置:这类似于虚幻引擎 3 中的信息设置。它列出了编辑器中最常用的设置。例如,切换角色捕捉的开/关,允许/禁止选择半透明对象,允许/禁止组选择等等都可以在这里更改。还值得一提的是,引擎的视觉设置,如分辨率、纹理渲染质量、抗锯齿等也可以在这里更改。
-
蓝图:我们有一个专门的章节介绍蓝图;因此,这是一个重要且在 UE4 中最常用的功能之一,应该不足为奇。您可以从这里访问蓝图编辑器。
-
电影: 这是 UE4 提供的另一个重要且常用的功能,使用它可以在虚幻电影中创建电影等。您可以从这里打开虚幻电影。
-
视口:
-
播放:当您点击播放按钮时,游戏会在视口中正常启动,供您测试您的关卡并查看一切是否按预期运行。游戏开始后,播放按钮会被其他三个按钮替换。
-
暂停:此按钮暂停游戏会话。暂停时,您可以恢复或跳过一帧。
-
停止:此按钮停止游戏会话,并将您带回编辑模式。
-
弹出:当您点击播放时,您可以控制一个角色。如果您点击弹出,您将停止控制角色,并可以在视口中移动它。
还有其他选项可以设置播放,只需单击按钮旁边的向下箭头,即可打开播放菜单。
- 启动:当您认为您的游戏已经完成并准备好进行移植时,单击启动按钮将会将您的项目烹饪、打包并部署为可执行应用程序文件(取决于您想要在哪个平台上部署您的游戏)。
视口
位于编辑器中心的视口是您创建和查看游戏的地方。您可以在这里放置和组装所有资产,以创建您的世界。
构建:构建是 UE4 的一个非常重要的功能。当您构建您的关卡时,引擎会预先计算光照和可见性数据,并生成导航网络,并更新几何形状。
让我们仔细看一下视口。要移动,按住鼠标左键或右键,并使用 W、S、A 和 D 键进行移动。要选择一个对象,左键单击它。顶部是视口工具栏,一些在左边,一些在右边。让我们逐个检查这些工具:
-
视口选项:在工具栏的最左边,有一个向下箭头表示的视口选项。单击后,会打开一个菜单,其中包含查看视口和你想在其中看到的选项。例如,你可以切换到所谓的游戏模式,它显示场景在游戏中的样子。这意味着诸如体积、隐藏的角色和角色图标(例如,在前面的截图中,有四个角色图标)都会被隐藏。还有一个叫做沉浸模式,它使视口全屏。视口选项菜单中还有其他可以设置的选项,所以四处看看吧!
-
视口类型:接下来,我们有视口类型菜单。有两种类型的视口,透视和正交。透视视图是完整的三维视图,在其中你可以看到三维场景。正交视图使你能够以二维方式查看世界,可以沿着XZ平面(前面)、YZ平面(侧面)或XY平面(顶部)。
-
视图模式:有各种模式可以选择查看你的世界。通过点击视图模式按钮,你可以查看 UE4 提供的各种视图模式。默认情况下,设置的模式是Lit。在这种模式下,你可以看到场景中放置的所有光源角色渲染的级别。你可以切换到Unlit,这个模式显示没有任何光照的场景。你还可以切换到Wireframe,它只显示场景中放置的角色的线框。
-
显示:从这里,你可以选择在场景中查看或隐藏哪些类型的角色。打开菜单后,你可以看到一个带有复选框的项目列表。如果复选框被选中,这些类型的角色在场景中是可见的。如果复选框未被选中,这些类型的角色是隐藏的。
-
变换工具:让我们移动到工具栏的右侧。首先是变换工具,有三个图标。在一个角色上可以执行三种变换操作。第一种操作是平移,即改变世界中一个角色的位置(或坐标)。第二种操作是旋转,即围绕x、y或z轴旋转一个角色。第三种操作是缩放,即增加或减小一个对象的大小。你可以通过从变换工具中选择任何一个来选择要执行的操作(你也可以在详细窗口中进行此操作)。
-
坐标系统:视口工具栏中的下一个项目,由一个球形图标表示,是坐标系统。在任何变换操作发生的两个坐标系统中:全局和本地。你可以点击按钮在它们之间切换。如果全局坐标系统处于活动状态,图标将是一个球形。当选择本地坐标系统时,图标将是一个立方体。当本地坐标系统处于活动状态时,你执行变换操作的轴将与角色的旋转对齐。当全局坐标系统处于活动状态时,它将不会与角色的旋转对齐;相反,它将与世界对齐。下面的截图向你展示了这意味着什么。在左边,本地坐标系统处于活动状态,在右边,全局坐标系统处于活动状态。
-
表面捕捉,网格捕捉和网格捕捉值:接下来的三个工具都与平移操作有关;因此,它们被分组在一起。表面捕捉工具,用一个弯曲线条和垂直箭头的图标表示,当激活时,会导致角色在平移时捕捉到表面(BSP、其他角色表面等)。当你想要将角色放在地面上时,这很方便。只需确保角色的枢轴在底部,因为枢轴点会捕捉到表面。
网格捕捉,用网格形状的图标表示,当激活时,会导致角色在平移时以特定值移动。将世界想象成一个网格,网格中的每个单元格都有一定的大小。当激活时,如果您平移一个角色,它将捕捉到这个网格。在关卡设计中特别方便,当您希望精确放置角色并确保一切正确间隔或对齐时。这些角色将移动的值可以在网格捕捉值菜单中设置。
-
旋转网格捕捉和旋转网格捕捉值:接下来的两个工具类似于网格捕捉,唯一的区别是这些工具用于旋转操作。当激活时,角色将按设定的值旋转(例如,10 度)。这个值可以在旋转网格捕捉值菜单中更改。
-
缩放网格捕捉和缩放网格捕捉值:网格捕捉组中的最后一个成员是缩放网格捕捉。这适用于当您希望缩放对象时。当激活时,角色将按特定增量放大或缩小,这可以在缩放网格捕捉值菜单中设置。
-
相机速度:从缩放网格捕捉继续,我们有相机速度。您可以使用箭头键移动相机。您可以通过在相机速度菜单中设置其速度来设置相机移动的速度。
-
最大化或恢复视口:在视口工具栏的最后一项,在右上角,是最大化或恢复视口按钮。如前所述,您可以切换到四种视口类型:透视、前视、侧视和顶视。单击后,视口分为 4 个部分,每个部分中有一个视口类型。以下截图显示了这是什么样子:
\
左上角是侧视图;右上角是前视图;左下角是透视图;右下角是顶视图。每个窗口都有自己的视口工具栏。您可以通过单击所需最大化的视口中的最大化或恢复视口按钮来最大化任何视口类型。在设计关卡和放置资产时,此视口设置最常见,因为您希望确保它们从各个方向正确对齐。因此,准备频繁在这些设置之间切换。
模式
模式窗口包含编辑器中的各种模式。根据您在编辑器中希望执行的任务,您可以从此面板选择要切换到的模式。
有五种模式,由五个不同的图标代表,你可以切换到这些模式。这些是:
-
放置模式:这是默认模式。用于将角色放置到您的关卡中。角色是您在游戏中放置的任何东西;这包括静态网格、灯光、触发器、体积等。这类似于其他游戏引擎中使用的实体或对象。可以在关卡中放置各种类型的角色;特别是所有类型项目中常见的角色。所有这些角色都根据其类型进行了分类,称为类。有 5 种类别。它们如下:
-
基本:这包含非常基本的角色,以及几乎在您制作的任何游戏中都会使用的角色。这些包括触发器、相机、玩家起始点等。
-
灯光:灯光面板包含不同类型的光源角色。例如,您有点光源,它像普通的灯泡一样发光,从一个点源均匀地向所有方向发光;还有定向光,它从一个无限远的源(如太阳)发光,等等。
-
视觉:这个类包含影响游戏视觉的所有角色,如后期处理体积、大气雾、贴花等。
-
BSP:BSP 或二进制空间分区包含 BSP 刷子,这是创建游戏几何体的基本构建块。该类包含不同形状的 BSP 刷子,例如盒子、圆锥、螺旋楼梯等。
-
体积:体积类包含不同的体积,每个体积都有不同的属性。例如,您有一个称为KillZ体积,它会摧毁进入其中的任何角色,包括玩家角色。这在制作陷阱和可以掉落的区域时非常有用。
-
绘画模式:绘画模式允许您在静态网格上绘制和调整颜色和纹理。在这里,您可以设置画笔大小、衰减半径、强度等。需要注意的是,您只能在当前选择的角色上绘制,以确保您只在网格上绘制,而不是其他地方。
-
景观模式:如果您有一个自然的户外环境,您可以在引擎中使用景观工具创建整个景观,而不是首先在 3D 建模软件中创建整个景观,然后将其导入引擎。启用景观工具时,视口中会出现一个巨大的绿色平面。这显示了一旦创建,景观的尺寸将是多少。您可以在窗口中设置尺寸和其他设置。当您满意时,只需点击模式窗口底部的创建按钮,它将创建景观平面。创建后,您可以雕刻和绘制平面以创建您的景观。要删除平面,只需点击放置模式以启用放置模式,选择平面,然后按删除键将其删除。
-
植被模式:在这种模式下,您可以快速绘制静态网格,使用绘制选择(放置)和擦除景观平面和其他静态网格上的静态网格。如果您要放置树木、植物、灌木、岩石等东西,这是一个非常方便的工具,因此被称为植被模式。您可以设置要放置的网格的密度、画笔大小以及要在植被模式中放置的角色或角色。
-
几何编辑模式:最后,我们有几何编辑模式。如前所述,BSP 刷子是您游戏几何体的基本构建块,非常有用。但是,提供给您的 BSP 刷子是特定形状的。如果您需要 BSP 刷子是不同形状的,您可以切换到几何编辑模式,然后手动自定义您的 BSP 刷子。
最后,如果您想要找到特定的角色,您可以在顶部的搜索栏中输入其名称,它会显示与您输入的名称匹配的角色。
世界大纲
世界大纲以分层格式显示场景中的所有角色。您可以从场景大纲窗口中选择和修改角色。这是一个很好的方式来跟踪场景中的角色。在制作相对较大的场景时,开发人员常常会忘记从场景中移除一些不再需要的角色。结果是,这些角色会留在场景中,在游戏运行时占用不必要的内存。世界大纲是防止这种情况发生的一种方式。
世界大纲中可以执行的一些操作如下:
- 创建文件夹:您可以创建一个文件夹并将角色放入其中。例如,在前面的屏幕截图中,有一个名为
Lighting
的文件夹,其中包含场景中存在的所有光角色。这使得跟踪您的资产变得更加容易。它还使事情看起来整洁、有序!
将角色分组到文件夹中在您想要移动某些角色而不干扰它们之间的相对位置时也非常方便。例如,假设您制作了一个室内场景,并且想要将其移动到不同的位置。您可以将房间中的所有资产分组到一个文件夹中,而不是单独移动所有资产或组合选择它们。如果要移动房间,只需单击文件夹,房间中的所有资产将被选择,您可以同时移动它们,而不会干扰它们的相对位置。要选择文件夹中的所有对象,请右键单击文件夹以打开菜单。然后,将光标移动到选择,然后单击全部后代。
-
隐藏功能:您可能已经注意到每个角色/文件夹左侧都有一个眼睛形状的图标。这是隐藏功能。如果单击它,相应的角色将在场景中隐藏。如果是文件夹,则该文件夹中的所有角色都将被隐藏。
-
附加角色:您可以附加两个或更多角色。这是另一种相对较快的移动一组角色的方法,而不会干扰它们之间的相对位置。要这样做,在场景大纲窗口中,只需选择角色,然后将其拖动到要附加到的角色上,然后在看到弹出窗口显示将角色名称附加到其他角色名称时释放它。您还可以将多个角色附加到另一个角色。
附加形式-层次结构:您附加其他角色的角色会成为某种父级角色。当您移动父级角色时,所有附加到它的角色也会移动。但是,如果移动附加的角色,则父级角色不会移动。
需要注意的一点是,要一起移动附加的角色,您必须从场景大纲中选择父级角色,然后移动它。如果您从视口中选择父级角色,只有它会移动,其他附加的角色不会移动。
在左下角,您可以看到场景中的许多角色。在右下角,有一个名为视图选项的东西,您可以根据视图选项菜单中的过滤器选择要查看的角色。
内容浏览器
所有游戏资产,如静态网格、材质、纹理、蓝图、音频文件等都显示在内容浏览器中。这是您导入、组织、查看和创建资产的地方。
顶部有三个图标,添加新,导入和保存所有。它们的描述如下:
-
添加新:使用此按钮,您可以创建新的资产,如材质、粒子系统、蓝图等
-
导入:如果您想要将内容导入到项目文件中,可以使用导入功能
-
保存所有:如果您在内容浏览器中创建或修改了资产,请单击保存所有以保存所有修改或创建的资产
在这些图标下面,我们有导航栏。如果您在内容浏览器中有很多文件夹和子文件夹,这将有助于您快速浏览它们。在右下角,有一个小的挂锁图标,默认情况下是未锁定的。如果您点击它,它将锁定所有在内容浏览器中查找的请求。在视口中,当您右键单击一个角色时,它会打开一个菜单。其中有一个名为在内容浏览器中查找的功能。当您点击它时,内容浏览器会显示资产的位置。如果锁定,当您点击在内容浏览器中查找时,它将不会显示资产的位置。相反,它将打开一个新的内容浏览器窗口,显示角色的位置。
在导航栏下方的左侧是来源面板。来源面板包含您项目中所有文件夹和集合。右侧是资产视图;这显示了来源面板中所选文件夹中包含的所有资产和子文件夹。顶部是筛选器菜单。如果您只想看到某种类型的资产,比如,如果您只想看到所选文件夹中包含的材质资产,那么您可以通过筛选器菜单来实现。在其右侧是搜索栏,您可以使用它来在所选文件夹中找到特定的资产。
在资产视图的底部,您可以看到所选文件夹中包含的资产和文件夹的总数。右下角是视图选项菜单,您可以从中设置您希望在资产视图中显示的方式。例如,您可以设置是否要将项目显示为瓷砖、列表或列。
详细信息
在详细面板中,您可以查看和修改当前所选角色的属性。
在顶部,您可以看到所选角色的名称(在本例中为Cube06
)。这是名称框,您可以将角色的名称设置为您喜欢的任何内容。在右侧是锁定按钮。默认情况下是未锁定的。当锁定时,详细面板将只显示该角色的属性或细节,即使您选择了不同的角色。
在搜索栏下方,您可以使用它来过滤您希望查看的属性。它旁边是属性矩阵按钮,它可以打开属性编辑器窗口。在右侧是显示筛选器按钮,您可以使用它来执行诸如折叠/展开所有类别、仅显示修改的属性以及在详细信息窗口中显示所有高级属性等操作。
在名称下方,有两个按钮,添加组件和蓝图/添加脚本。添加组件,顾名思义,允许您向所选角色添加组件。这些组件包括静态网格、形状基元(立方体、球体、圆柱体和圆锥体)、光线角色等。这类似于世界大纲中的附加角色功能。角色以层次结构附加,所选角色为父级。
除了附加组件之外,您还可以将所选的角色转换为蓝图类。蓝图类是一个带有组件和一些代码的角色。(在其他引擎中,相当术语为预制件)。我们将在后面的章节中详细介绍这一点。
最后,在底部是属性区域,显示了所选角色的所有属性,例如位置、旋转、比例、当前使用的材质、添加和移除材质等,您可以进行修改。
快捷键和控件
我们将通过列出一些您应该了解的窗口控件和快捷键来结束我们对编辑器的讨论。记住它们!这将使浏览编辑器变得更加容易和高效。以下是您应该了解的基本控件:
控件 | 动作 |
---|---|
左键 | 这会选择光标下的任何角色 |
左键 + 鼠标拖动 | 这会将摄像机向前和向后移动,并左右旋转 |
右键 | 这将选择光标下的角色并为该角色打开选项菜单 |
右键 + 拖动 | 这会根据鼠标拖动的方向旋转摄像机 |
左键 + 右键 + 拖动 | 这会根据鼠标移动的位置将摄像机向上、下、左、右移动 |
中键 + 拖动 | 这会根据鼠标移动的位置将摄像机向上、下、左、右移动 |
滚动上 | 这会将摄像机向前移动 |
滚动下 | 这会将摄像机向后移动 |
F | 这会放大并聚焦所选的角色 |
方向键 | 这会将摄像机向前、向后、向左、向右移动 |
W | 这将选择平移工具 |
E | 这将选择旋转工具 |
R | 这将选择缩放工具 |
W + 任意鼠标按钮 | 这会将摄像机向前移动 |
S + 任意鼠标按钮 | 这会将摄像机向后移动 |
A + 任意鼠标按钮 | 这会将摄像机向左移动 |
D + 任意鼠标按钮 | 这会将摄像机向右移动 |
E + 任意鼠标按钮 | 这会将摄像机向上移动 |
Q + 任意鼠标按钮 | 这会将摄像机向下移动 |
Z + 任意鼠标按钮 | 这会增加视野范围(释放按钮时返回默认值) |
C + 任意鼠标按钮 | 这会减小视野范围(释放按钮时返回默认值) |
Ctrl + S | 这会保存场景 |
Ctrl + N | 这会创建一个新场景 |
Ctrl + O | 这会打开一个保存的场景 |
Ctrl + Alt + S | 这会让您以不同格式保存场景 |
Alt + 左键 + 拖动 | 这会创建所选角色的副本 |
Alt + 左键 + 拖动 | 这会使摄像机完全旋转 360 度 |
Alt + 右键 + 拖动 | 这会将摄像机向前或向后移动 |
Alt + P | 这会让您进入播放模式 |
Esc(游戏中) | 这将退出播放模式 |
F11 | 这将切换到沉浸模式 |
G | 这会切换到游戏模式 |
摘要
在本章中,我们仔细研究了项目浏览器、编辑器、其用户界面,以及如何浏览它以及一些重要的控件和快捷键,您应该知道。我们现在已经涵盖了您实际开始使用 UE4 制作游戏所需的一切。因此,让我们开始制作我们的游戏。
在下一章中,我们将带您了解项目是什么,您可以创建哪些不同类型的项目,如何使用 BSP 刷子,在游戏中导入和实施资产,照明等等。
第三章:构建游戏-第一步
到目前为止,希望你已经把一切都设置好了。你现在已经知道足够的知识,让我们最终开始你真正来这里的目的,使用 UE4 制作游戏。UE4 的一个很棒的特性是它很容易上手,但很难精通,因为你可以用这个强大的引擎做很多事情。我们将从制作游戏的核心元素开始,即关卡、灯光和材质。
在本章中,我们将涵盖以下主题:
-
项目是什么,UE4 提供的不同类型的项目,加载和创建新项目
-
我们游戏的概念、目标、类型和特点
-
几何和 BSP 刷子
-
将资产导入到内容浏览器和关卡中
-
如何创建材质
-
灯光、类型、实现和构建灯光
项目
项目是一个实体,它包含构成您的游戏的所有资产、地图和代码。创建后,您可以在该项目内创建多个关卡或场景。您可以创建并购买自己的项目文件并使用它们。大多数情况下,您可以购买的项目都是以资产和关卡根据该主题制作的主题。例如,您可以从市场免费下载Sci-Fi Hallway项目。该项目文件包含各种对象、材质和未来走廊的示例关卡设置。
创建新项目
创建新项目时,UE4 提供了许多模板供您选择,具体取决于您希望制作的游戏类型。让我们再次看看虚幻项目浏览器,以更好地理解这意味着什么:
在前面的截图中,我们看到有各种类型的可用模板。这些模板是您可以创建的项目文件,其中包含您需要制作的游戏类型的框架。例如,如果您想制作第三人称射击游戏或冒险游戏,您可以选择第三人称,其中包含摄像机、角色和基本的脚本机制。它还包含一个示例地图,您可以在其中测试控件和机制。要创建新项目,只需突出显示您希望创建的游戏类型,然后单击创建项目。
打开现有项目
打开项目有几种方法。一种方法是通过我的项目,在引擎启动库部分。第二种方法是在虚幻项目浏览器中,在项目面板下。加载项目的第三种方法是在编辑器本身。要这样做,只需单击菜单栏中的文件以打开文件菜单,选择打开项目,然后简单地选择要打开的项目。这样做将关闭当前项目并重新打开编辑器。
项目目录结构
默认情况下,您创建的任何项目都存储在C:\Users\*account name*\Documents\Unreal Projects
中。打开此文件夹,您将看到类似以下截图的内容:
在前面的截图中,每个项目都有自己单独的文件夹。每个文件夹包含与该项目相关的文件和文件夹,如资产、地图、项目文件或.uproject
文件等。四处看看,看看哪个文件夹包含什么,以及它们各自的作用。要删除任何项目,只需删除要删除的项目的文件夹。
Bloques
我们已经设置好了项目。我们可以开始制作我们的游戏。让我们先谈谈游戏是什么。
概念
我们在本指南中要制作的游戏是 Bloques,这是一款为安卓设计的第一人称解谜游戏。游戏的主要目标是解决每个房间中的一系列谜题,以进入下一个房间。我们要制作的游戏将有四个房间;随着每个级别的提升,谜题会变得更加复杂。
控制
玩家使用两个虚拟摇杆来控制角色,一个用于移动,另一个用于观察。所有游戏的交互,如拾取物品、打开门等,都将通过触摸来完成。
为游戏创建项目
我们需要做的第一件事是设置一个项目。在引擎启动器中,通过启动按钮启动编辑器。用于制作这个游戏的版本是 4.7.6。在虚幻项目浏览器打开后,打开新项目面板,按照以下步骤操作:
-
从模板部分选择第一人称,并在蓝图选项卡中选择模板。
-
在目标硬件选项中,选择移动/平板。
-
在质量设置中,你有两个选项,最高质量和可扩展的 2D 或 3D。如前所述,如果你正在制作 PC 或游戏机游戏,你应该选择最高质量,如果是移动或平板,选择可扩展的 2D 或 3D。记住这一点,选择可扩展的 2D 或 3D。
-
在询问你是否要使用起始内容的菜单中,选择无起始内容。
-
最后,将项目命名为
Bloques
。
在所有这些设置之后,它应该看起来像这样:
接下来,只需点击创建项目。我们现在已经设置好了我们的项目。编辑器打开后,你会看到一个已经设置好的测试关卡。测试关卡只是为了展示你选择的模板提供的基本功能和机制。在第一人称模板中,玩家可以移动、跳跃和射击。另一个很棒的功能是,当你将移动/平板作为目标硬件时,UE4 会自动提供两个虚拟游戏手柄,一个用于移动,另一个用于观察。这省去了不少需要编写控制脚本的工作。
然而,我们不想在这个示例地图上工作。我们想要在一个新地图上工作。要做到这一点,只需点击文件打开菜单,然后点击新建关卡。点击它将打开新建关卡窗口,其中提供了两种类型的关卡,默认和空白。默认关卡具有非常基本的组件,如天空盒和玩家起始角色已经设置好。
空白关卡,然而,正如其名字所示,里面绝对什么都没有设置。如果你想从零开始制作游戏,你应该选择空白关卡。由于我们的游戏将在室内进行,我们并不真的需要天空盒。因此,选择空白关卡。我们现在已经设置好了我们将制作游戏的关卡。让我们将这个关卡保存为Bloques_Game
。你的视口现在会是这样的:
BSP 刷
我们需要做的第一件事是建立我们的关卡。我们将借助 BSP 刷来完成这一点。我们在第二章简要谈到了 BSP 刷,但现在我们将稍微详细地谈论一下它们。BSP 刷为你的关卡创建了体积和表面。它提供了一个快速简便的方法来阻挡你的关卡并快速制作原型。你甚至可以使用 BSP 刷来创建整个关卡。如果你没有访问 3D 建模软件,如 Maya 或 3DS Max,来为你的关卡创建资产(如墙壁、天花板等),那么你可以使用 BSP 刷来创建你的关卡。BSP 刷可以在模式面板的放置模式中选择。
默认 BSP 刷形状
如前一章所述,UE4 提供了共计七个默认刷子。以下是刷子创建的几何体的截图:
从左到右,你有:
-
盒子刷:这会创建一个立方体形状的刷子。你可以设置盒子的长度、宽度和高度。你还可以设置立方体是否为空心。如果是的话,你可以选择设置墙壁的厚度。
-
球体刷子:这将创建一个球形刷子。你可以设置细分的数量。增加细分的数量将使其更加光滑,更像一个真正的球体。然而,请记住增加细分的数量将增加表面的数量,因此需要更多的内存来渲染。考虑到这一点以及移动设备的技术限制,拥有一个低多边形几何和良好纹理的效果要比高多边形几何和糟糕纹理的效果更好。
-
圆柱刷子:这将创建一个圆柱形刷子。你可以设置其半径和高度。你还可以增加或减少边的数量。与球体刷子一样,增加边的数量将增加长度上的表面数量,使其更加光滑,但将需要更多的内存来渲染。
-
圆锥刷子:这将创建一个圆锥形刷子。你可以设置诸如高度、底部半径等属性。你还可以设置刷子中的表面数量。
-
直线楼梯刷子:这允许你创建直线楼梯。你不需要对楼梯进行建模、展开和导入到你的关卡中,你可以在引擎中创建它。你可以设置每个台阶的长度、宽度和高度、台阶数量以及第一个台阶下方的距离等属性。
-
曲线楼梯刷子:你还可以使用曲线楼梯刷子创建曲线楼梯。你可以设置诸如曲线的内半径、曲线的角度(曲线的角度意味着楼梯会弯曲多少。你可以将其设置为 0 到 360 度之间的任何值)、台阶数量以及第一个台阶下方的距离等属性。最后,你还可以设置是否希望楼梯顺时针或逆时针弯曲。
-
螺旋楼梯刷子:最后,我们有螺旋楼梯刷子。螺旋楼梯和曲线楼梯的区别在于螺旋楼梯可以重复包裹自身,而曲线楼梯不能。你可以设置诸如内半径、宽度、高度、每个台阶的厚度、台阶数量以及整个螺旋中的台阶数量等属性。最后,你还可以设置选项,比如是否希望楼梯的底部和/或表面是倾斜的还是阶梯状的,以及是否希望螺旋是顺时针还是逆时针的。
上述刷子类型可以通过放置/BSP下的模式面板使用添加或减去刷子类型来创建几何图形。当一个刷子被添加到你的关卡并用于创建几何图形时,添加刷子类型将在放置的任何地方添加几何图形。减去刷子类型将移除任何与添加几何图形重叠的几何图形。
除了这些设置,你还可以设置几何图形每个表面的属性,比如平移、旋转、翻转和缩放U和/或V坐标。当你将材质应用到它们时,你可以看到它们的效果。
最后,你还可以使用刷子创建体积,比如触发体积、阻挡体积、造成疼痛的体积等等。
编辑 BSP 刷子
假设你想使用 BSP 刷子创建几何图形,但你需要的形状不是七种默认形状之一。在这种情况下,你可以使用几何编辑模式创建自己的刷子。它位于模式面板的最右侧。单击它以切换到几何编辑模式。
在上述截图中,你可以看到当你切换到几何编辑模式时,几何图形中的所有顶点、面和边。你可能也注意到顶点的大小已经增加。在这种模式下,你可以选择整个刷子、一个面、一个顶点或几何图形的一个边。
在模式面板中,您可以看到几种操作,如创建,删除,翻转等。有些您可以执行,而其他则不行。您可以执行哪些操作取决于您选择了什么(例如顶点、边缘或面)。
使用 BSP 刷子堵住房间
现在我们将为游戏设计环境。制作四个房间并将它们堵住,以便玩家必须在一个房间解决谜题才能进入下一个房间。
第一个房间
第一个房间将相对简单。房间将是长方体的。由于这是玩家的起点,他/她将在这个房间里介绍机制,如移动、观察、拾取和放置物体。玩家只需拿起钥匙方块并将其放在基座上即可打开门。通过这个简单的任务,玩家还将了解每个房间的主要目标。
所以让我们从制作地板开始。我们将使用Box Brush。要添加Box Brush,只需在BSP下的模式面板中单击Box,然后将其拖放到视口上。在详细信息面板中,将刷子的尺寸设置为2048 x 2048 x 64
。我们希望这个房间相对较小,因为谜题很简单,而且为了避免不必要的行走,因为玩家可能会感到无聊。
之后,让我们现在制作墙壁。同样,我们将使用一个 Box BSP 刷子来制作它们。将尺寸设置为2048 x 64 x 1024
。制作完一面墙后,只需单击并按住Alt键并移动墙壁以创建一个副本,然后将其放在房间的另一侧。
注意
使用 BSP 刷子时,将视图模式切换为未照明。否则,您将无法看到表面,并且每次引入表面时都必须构建照明。
对于相邻侧的墙壁,让我们将尺寸设置为64 x 2048 x 1024
。与其他墙壁一样,只需复制 BSP 刷子并将其移动到房间的另一侧。
最后,对于天花板,只需复制地板并将其拖放到墙壁上方。
注意
为了防止光线渗透和其他与照明和渲染有关的问题,请确保任何刷子之间没有间隙。切换到顶部、侧面或正面视图,确保所有墙壁和天花板都完美对齐。
这个房间现在需要的是一个门的洞。否则,玩家将被困在第一个房间,无法前进到下一个房间。我们将借助减法 BSP 刷子来做到这一点。
要创建一个减法刷子,将Box Brush拖放到级别上,并在详细信息面板中将刷子类型设置为减法。将其尺寸设置为64 x 256 x 256
。将这个减法刷子放在房间较短一侧的任何墙上。
最后,让我们在门附近添加一个基座,玩家必须将钥匙方块放在上面才能打开门。
现在,我们已经堵住了第一个房间。让我们继续下一个。
第二个房间
在第二个房间,我们将为玩家增加一些挑战。进入第二个房间后,中间将有一扇大门。玩家可以通过触摸屏幕打开门。然而,一旦他/她抬起手指或离开门,门就会关闭。玩家右侧将有钥匙方块;然而,它被困住了。为了解锁钥匙方块,玩家必须走过门,取回另一个方块,将其放在门附近的平台上,解锁钥匙方块,将其放在基座上,然后前进到下一个房间。
在第一个房间中,我们分别创建了每个表面(墙壁、地板和天花板)。我们可以使用另一种方法来创建我们的第二个房间。为此,我们将利用刷的中空属性在详细面板中。
说到这里,选择盒子刷,并将其拖到场景中。接下来,将其尺寸设置为2048 x 1544 x 1024
,并将其位置放在第一个房间旁边(记得将其放在有门的墙旁边)。将其位置设置如下截图所示:
一旦定位好,选择刷,转到详细面板并勾选中空。一旦勾选,将会出现一个新的设置,墙壁厚度。将其值设置为128(确保我们在前一个房间中用于门的减法刷重叠在两面墙上;否则,你将看不到门)。
就是这样!我们已经完成了第二个房间的布局,而不必花费大量时间放置房间的每个部分,并确保它们正确对齐。剩下要放置的只有基座和通往第三个房间的门的洞。对于门,只需像我们为第一个房间所做的那样,创建一个尺寸为64 x 256 x 256
的减法刷,然后将其放置在房间的另一侧。或者,复制第一个房间的减法刷,然后将其副本移动到房间的另一侧。
最后,为了完成一切,我们将在这个房间中添加两个基座。一个基座将放在房间中间附近,那里将会有一个大门。玩家必须将第一个钥匙立方体放在这个基座上才能解锁第二个钥匙立方体。
第二个基座放在房间的另一侧,玩家必须将钥匙立方体放置在那里,才能打开通往第三个房间的门。
通过这样,我们已经完成了第二个房间的布局。现在让我们继续到第三个房间,那里的事情开始变得有趣起来。
注意
记得要经常保存,这样在引擎突然崩溃或出现其他技术问题时,就不会丢失你的工作。要保存,只需点击Ctrl + S,或者点击视口工具栏上的保存按钮。
第三个房间
到目前为止,玩家应该已经了解了游戏中的基本机制和控制。现在让我们在第三个房间给他/她一个更大的挑战。进入第三个房间后,玩家和通往最终房间的门之间会有一个坑。为了能够穿过坑,玩家将需要一座桥。
为了画出桥梁,玩家必须引导一个由 AI 控制的物体到一个开关上。这个物体将沿着一条路径移动。然而,一些部分缺失。玩家可以通过放置在关卡中的开关来填补这些空隙。挑战在于确定要按下哪个开关以及何时按下它。这也依赖于正确的时机。当物体到达目的地后,桥梁将被画出,玩家可以穿过,拿到钥匙立方体,打开门,然后进入下一个关卡。
有两种构建坑的方法;第一种方法是将房间分成两部分。第一部分在坑的一侧,第二部分在另一侧。在制作好两部分后,构建坑,最后放置它们。然而,这是一种不好且耗时的构建房间和坑的方法。当渲染关卡时,我们还会有额外的表面,意味着更多的内存使用。此外,你还必须费力地将所有部分正确对齐,以确保没有空隙。
我们将使用的第二种方法是创建整个房间,并借助减法刷挖出坑。这样,我们就不必担心额外的面对齐房间的部分,而且我们还可以通过移动和/或编辑减法刷轻松设置坑的尺寸。
和往常一样,让我们从地板开始。现在,由于我们要挖出坑,地板的高度将比其他房间更高。选择Box Brush,将其尺寸设置为4096 x 2048 x 512
。这将是主要区域,谜题将在这里进行。
由于这个房间比前几个房间更高,我们需要一些楼梯,以便玩家可以到达第三个房间。首先,添加一个小的Box Brush,将其尺寸设置为512 x 1544 x 64
,并将其放在前一个房间的门附近。
要添加楼梯,从Modes面板中将Linear Stair Brush拖到级别上。将楼梯的宽度设置为1544
,步数设置为23
。将楼梯放在我们之前放置的Box Brush的边缘;最后,将第三个房间的地板放在楼梯旁边。
要添加坑,我们需要一个减法刷。选择减法刷的另一种方法是首先选择刷子的形状,这种情况下是Box Brush,然后在Modes面板中,在底部,您可以设置刷子类型为添加或减去。只需选择减去并将刷子拖到级别上。
我们必须确保坑足够宽,以便玩家无法跳过去,而且足够深,以便玩家一旦掉进去就无法跳出来。牢记这一点,将刷子的尺寸设置为640 x 2304 x 512
。将坑放在房间的另一端。
现在我们要放置墙壁。我们将分几步向这个房间添加墙壁。首先,选择一个 Box 刷,将其尺寸设置为4096 x 64 x 512
,并将其放在房间的较长一侧。复制并将第二面墙放在另一侧。
接下来,我们需要沿着通向第三个房间的楼梯和走廊放置一些墙壁。为此,将尺寸设置为1202 x 64 x 1024
,并将其放在楼梯的两侧,确保它们都正确对齐,并且在刷子之间没有任何间隙。
在前面的截图中,您可能已经注意到走廊的墙壁和房间较长一侧的墙壁之间有一些间隙。让我们用尺寸为64 x 188 x 512
的 Box 刷填充。在两侧各放一个,以填补间隙。
最后,我们要放置的墙在房间的远端,沿着较短的一侧。将Box Brush的尺寸设置为64 x 2048 x 512
,并使用减法刷放置最终的墙壁。
走廊的天花板尺寸为1202 x 1544 x 64
,房间的天花板尺寸为4096 x 2056 x 64
。
现在我们已经阻挡了房间,我们需要在继续第四个和最后一个房间之前添加一些东西。首先,我们要放置一些面板,上面有开关,玩家可以按下以引导物体穿过坑。只需从前几个房间复制基座并将其放在这个房间中以创建面板。将它们放在任何较长的墙壁附近,并以玩家可以看到另一面墙的方式放置。
最后,在门附近放置一个基座。有了这个,我们已经完成了第三个房间的阻挡。现在,让我们阻挡第四个和最后一个房间。
第四个房间
我们只剩下一个房间要挡住了。在前三个房间中,我们有不同的谜题和目标。在第四个房间,我们将结合前一个房间的所有谜题。在这个房间里,玩家的目标与前一个房间相似,引导一个由 AI 控制的对象穿过门和坑等障碍物,朝着房间的另一侧前进。对象将沿着预定义的路径移动,并持续移动直到到达目标。如果撞到门或掉进坑,它将从起始位置重置。
由于我们将有坑,房间的高度将与以前的房间相似。而且,这将是最大的房间。记住这一点,我们将通过选择尺寸为5120 x 2048 x 512
的盒子刷来制作地板。
现在我们有了地板,我们要做一些坑。再次选择减法模式,创建一个尺寸为728 x 1928 x 512
的盒子刷,并将其放在门附近。在这个房间里,我们将有三个坑,所以通过按住Alt键复制减法刷,创建两个副本并将它们放在地图上。
接下来是墙。对于较长的一侧,只需复制第三个房间的墙。在详细信息面板中,将X的值设置为5120
,然后放置墙壁。复制并放置另一面墙。对于较短的一侧,您可以做同样的事情——复制并放置较短的一侧墙壁(带门的那一面)在房间的另一端。
接下来,复制,将刷子的Z值设置为64
,并向上拖动以形成屋顶。
最后,我们将放置一些基座,开关将放置在那里。
有了这些,我们现在已经完成了挡住我们最后一个房间!
现在我们已经挡住了我们的房间,让我们放置一些资产,创建材质,并将它们应用到我们的水平上。
内容浏览器
在上一章讨论编辑器用户界面时,我们简要谈到了内容浏览器。让我们再多谈一些。内容浏览器是项目中存储和显示所有资产的地方。这些资产包括网格、纹理、材质、骨骼网格、蓝图、地图文件、音频文件等等。
在上面的截图中,您可以看到不同的文件夹,每个文件夹都根据其中包含的内容命名。根据资产类型组织您的资产是一个良好的做法,也可以防止在项目有大量资产时后期混淆。
迁移和导入资产
在创建游戏时,您最需要的是资产,因为没有它们,您的游戏将只是一个空白地图。您会希望将为游戏创建的资产导入到项目中。为此,您需要先将它们导入到项目文件中,然后才能使用它们。目前,UE4 接受以下资产:
-
纹理文件:这些是 2D 图像,可以导入为
.jpg
、“。png”、“。bmp”和.tga
文件。 -
静态网格/骨骼网格:静态网格是使用 3D 软件(如 Maya、Max、Blender 等)创建的 3D 对象。骨骼网格是可以进行动画的网格。您可以将它们导入为
.obj
文件,以及.fbx
文件。 -
音频文件:您可以导入音频文件,如音乐、音效、对话等(单声道),作为
.wav
文件。您还可以导入具有多个通道(立体声)的音频文件。 -
脚本文件:您还可以将脚本文件作为
.lua
文件导入到 UE4 中。 -
IES 灯光配置文件:IES 灯光配置文件定义了弧线中的光强度。这通常用于使光线看起来更真实。这些文件也可以作为
.ies
文件导入到 UE4 中。 -
立方体贴图:立方体贴图以
.hdr
文件的形式导入。这些文件用于绘制环境,特别是如果您的游戏有室外场景。这些文件包含有关范围内颜色和亮度的信息。 -
True Type 字体:您还可以导入各种类型的字体用于您的游戏。字体通常用于 huds、UI 等,并且可以导入为
.ttf
文件。
导入资产
有两种方法可以将为您的游戏创建的资产导入到项目文件中。
注意
为了演示如何导入资产,Maya 中创建了一个简单的球体,并导出为 FBX 文件。
第一种方法是通过Content Browser:
-
单击Content Browser顶部的Import按钮。
-
单击后,将打开一个窗口,询问您要导入哪个资产。只需搜索您的资产所在位置,突出显示它,然后单击打开。
-
单击打开后,将打开导入选项窗口,具体取决于您导入的资产类型。满意导入设置后,单击导入,资产将导入到您的项目文件中。
将资产导入到项目的第二种方法是简单地拖动要导入的资产并将其放入Content Browser中。要这样做,只需从存储位置单击并拖动资产,然后释放左鼠标按钮到Content Browser上。释放左鼠标按钮时,将打开导入选项窗口,与第一种方法中提到的窗口类似。再次,满意设置后,单击导入,资产将被导入。
迁移资产
有时,您可能需要来自不同项目文件的某些资产。在这种情况下,之前提到的导入资产的方法将不起作用,因为项目的内容保存在您的系统上,格式为.uasset
文件或.umap
文件。因此,UE4 将无法导入它们。因此,您必须执行迁移资产操作。
当我们创建项目时,我们选择无起始内容,因为我们不需要所有内容。这将占用不必要的空间。但是,我们确实需要一些资产,特别是墙和地板材料。为了演示这一点,已经设置了一个带有所有起始内容的新项目。
这是一个带有所有起始内容的项目。我们需要的是两种材料,即M_Basic_Floor和M_Basic_Wall。迁移这两种材料并按照以下步骤操作:
-
突出显示M_Basic_Floor和M_Basic_Wall,右键单击以打开菜单。在菜单中,将光标悬停在资产操作上,并单击迁移。
-
单击后,将打开一个窗口,告诉您以下资产将迁移到另一个项目。
-
单击确定后,将打开另一个窗口,询问您要将资产移动到何处。您希望将它们存储在项目的
Content
文件夹中。打开时,找到您的项目文件夹(如果您记得的话,它在我的文档
中),并将其存储在Content子文件夹中。 -
单击后,您将收到提示说资产已成功迁移。
如果现在返回到 Blockmania 项目,您将看到Content Browser中的Materials子文件夹中显示了M_Basic_Floor和M_Basic_Wall。
放置演员
一旦您在Content Browser中拥有所有资产,下一步是将它们放置在游戏中。我们将使用Content Browser中的立方体网格来创建游戏中的对象,例如关键立方体,AI 控制的对象,门等。
首先,让我们制作门,在您将钥匙方块放在基座上时打开。只需从内容浏览器中拖动TemplateCube_Rounded静态网格,并将其放置在门应该放置的位置。使用缩放工具设置其尺寸,使其完美适合。
为了使事情更加简单和方便,您可以在详细信息面板中将方块的名称更改为Door01
。对于其他的门,由于洞口的尺寸相同,您可以简单地复制这个角色并放置副本。最后,由于这些将会移动并且不会在游戏中保持静止,将其移动性类型设置为可移动。
提示
使用不同的视角来设置尺寸,并将门与洞口对齐。
接下来,让我们将玩家在房间中间遇到的大门放置在房间中间。再次从内容浏览器中取出TemplateCube_Rounded角色,并将其放置在第二个房间。设置其尺寸,以阻止角色移动到房间的另一侧。将其命名为Room_Door01
。同样,在第四个房间中复制并放置它,但是你需要修改第四个房间的门的尺寸,因为第四个房间的尺寸与第二个房间有些不同。
接下来,我们必须放置玩家必须收集并放置以进入下一个房间或解锁其他钥匙方块的钥匙方块。我们将再次使用TemplateCube_Rounded。将其比例设置为0.15
,并将其放置在我们的关卡中。以下是四个房间中钥匙方块的放置快速概述:
-
第一个房间:在第一个房间,我们只需要一个钥匙方块。您可以将它放在房间中间的任何地方。
-
第二个房间:在第二个房间,我们需要两个钥匙方块。将第一个方块放在大门的一侧,将第二个方块放在另一侧。第一个方块将被锁住,玩家必须将第二个方块放在基座上才能解锁它。
-
第三个房间:在第三个房间,我们只需要一个钥匙方块,AI 对象击中目标后将解锁它。因此,将它放在靠近通往第四个房间的门边坑的另一侧。
-
第四个房间:在第四个房间,将钥匙方块放在房间的另一侧。当 AI 对象击中目标时,它也将被解锁。
我们已经在游戏中放置了所有必要的资产。让我们在我们的关卡中添加一些装饰性的方块。由于装饰性资产将保持静止,不会在游戏中移动,您应该将它们的移动性设置为静态。只需在地图周围放置方块,以不同的图案排列它们。
材质
在 UE4 中,在将纹理应用到对象之前,您首先必须创建材质。材质是游戏中对象的渲染方式,它是包含许多属性的着色器集合,可以应用于对象并在游戏中渲染。更加技术性地说,当光源的光线照射到表面或对象上时,材质决定了光线如何与表面或对象相互作用(颜色、纹理、表面的粗糙或光滑程度、金属质感等)。
UE4 使用基于物理的着色。在虚幻引擎的早期版本中,材质具有一些任意的属性,比如漫反射强度、自定义光照漫反射等等。在 UE4 中,材质具有更多相关的属性,比如基础颜色、金属质感、粗糙度等等,使得这个过程更容易理解。
材质是在所谓的材质编辑器中创建的。因此,在我们开始创建自己的材质之前,让我们先谈谈它及其用户界面。
材质编辑器
材质编辑器是一个简单但非常强大的工具,您可以用它来为您的对象创建材质。例如,您可以将纹理文件应用于材质的漫反射通道,然后在您的资产上使用它。对于我们的游戏,我们将从头开始创建自己的材质。要访问材质编辑器,您首先需要创建一个新材质,或者双击现有材质。要创建新材质,请单击内容浏览器左上角的添加新按钮,然后选择材质,它将位于创建基本资产部分下方。完成后,您将看到创建了一个新材质。双击它以打开材质编辑器。打开后,您应该看到这个窗口:
让我们首先看一下编辑器本身及其用户界面。与编辑器一样,我们将材质编辑器用户界面分成几个部分,并逐个进行介绍。
标签和菜单栏
在顶部,我们有标签和菜单栏。标签栏类似于编辑器的标签栏。
在标签栏下面,我们有菜单栏。与编辑器中的菜单栏一样,它提供了所有的常规命令和操作。它们的描述如下:
-
文件:单击此将打开文件菜单。从这里,您可以执行诸如保存您创建的材质、从内容浏览器打开资产等操作。
-
编辑:这将打开编辑菜单。在这里,您可以撤消或重做您可能执行的任何操作。您还可以从这里访问编辑器和项目设置。
-
资产:从资产菜单中,您可以在内容浏览器中找到您正在创建的材质,并打开当前材质的引用查看器窗口。
-
窗口:在此菜单中,您可以选择在材质编辑器窗口中要显示的面板,搜索图形面板中的特定节点,访问插件窗口等。
-
帮助:最后,如果您想了解更多关于材质编辑器或需要找到问题的解决方案,您可以从这里访问维基页面和官方 Epic 文档。
工具栏
再次与编辑器中的工具栏进行比较,这里的工具栏显示了您在制作材质时可能执行的所有最常用的操作。
-
保存:从左边开始,由软盘表示的是保存按钮。这是保存您对材质所做的任何修改。
-
在 CB 中查找:在 CB 中查找(或内容浏览器),由放大镜表示,可以在内容浏览器中定位并突出显示您在材质编辑器中打开的当前材质。
-
应用:接下来是应用按钮。如果您已经将当前材质应用于游戏中的对象,一旦对其进行任何修改,单击应用将更新当前场景中的材质。
-
搜索:需要找到节点或连接吗?您可以通过单击搜索并输入您想要查找的内容来进行。当您单击它时,搜索面板将在材质编辑器底部打开。只需输入您想要查找的内容,它将在面板中给出结果。
-
主页:主页按钮将图形面板重新聚焦到材质输入描述(在材质编辑器中首先看到的节点,带有所有这些输入)。当您创建非常复杂的材质时,这将非常方便,因为您将有许多节点彼此连接,并可能会忽略材质描述。
-
清理:清理按钮会删除未连接到材质输入的任何节点。这非常方便,因为即使未连接的节点也会使材质在内存使用方面变得不必要地沉重。
-
连接器:默认情况下,此选项已打开。关闭时,任何未使用的输入或输出引脚(未连接到任何东西的引脚)将被隐藏。这是保持工作区清洁和有组织的好方法,因为它会清除视图中的混乱。
-
实时预览:这也是默认打开的。打开时,您对材质所做的任何修改都将在视口面板中实时更新。
-
实时节点:启用时,它会实时更新每个节点中的材质。
-
实时更新:当您打开此选项时,它会实时编译着色器和所有节点和表达式,每次您更改、添加、删除节点或更改参数值时都会这样做。
-
统计:打开时,您可以在材质编辑器底部看到您创建的材质的统计信息。这可以让您了解您的材质有多重。
-
移动设备统计:这类似于统计,但会为移动设备提供材质统计和任何错误信息。
调色板面板
调色板面板包含可以在材质编辑器中使用的所有节点。
所有的函数、表达式等都按类别列在这里。您可以在顶部选择类别,并使用它来过滤您想要显示的节点类型。
如果您想要找到特定的节点,您可以在下方的类别栏下搜索它。
统计面板
如前所述,统计面板显示了您创建的材质的所有统计信息。
如果您在工具栏中打开了移动设备统计,您还将在此处看到移动设备的统计信息。这基本上向您显示了您的材质中有多少指令和着色器。这将让您了解您的材质有多大和多重。
详细面板
详细面板显示了材质的一般属性,例如材质域,这意味着您想要创建什么类型的材质。
普通材质,例如应用于角色的材质,是表面材质。如果您希望您的材质是贴花(我们将在下一章中讨论),您可以切换到贴花等。
您还可以在此面板中设置所选节点的属性。
视口面板
视口面板是您可以预览正在创建的材质的地方。如果启用了实时预览选项,您所做的任何修改都将实时更新并在此处预览。
默认情况下,形状原语是一个球体。您可以使用视口面板顶部的按钮切换到圆柱体、平面、立方体或材质编辑器中的特定网格。您还可以在这里切换网格的显示/隐藏,以及切换实时预览的显示/隐藏。
图形面板
材质编辑器用户界面的最后一个元素是图形面板。这是您创建材质的地方。
在我们继续之前,有一些术语和表达式您应该知道,因为我们在本书中会经常使用它们。首先,我们有一个叫做节点的东西。节点是您连接到材质或蓝图脚本的任何东西。它可以是变量、表达式等。在上面的截图中,这里的节点将是您看到的长面板。
现在,每个节点都有输入、输出或两者。输入是节点接受的任何值或表达式,位于节点的左侧作为白色引脚。回到上面的截图,该节点接受相当多的输入,每个输入对应材质的不同属性。
输出引脚是节点返回的内容(值、表达式等),也用白色圆形引脚表示。它们位于节点的右侧。当连接到两个或更多节点时,你将第一个节点的输出引脚连接到第二个节点的输入引脚,依此类推,以创建一系列节点。
在前面的截图中,你可以看到一个带有许多输入的长节点。这是材料输入。每个输入对材料有不同的影响。你可能也注意到一些输入是白色的,而其他的是变暗的。变暗的节点是当前禁用的,不能使用。哪个输入被启用,哪个被禁用取决于材料的混合模式,可以在详细信息面板中找到并更改。例如,看一下截图,不透明度节点当前被禁用。这是因为材料的混合模式设置为不透明,所以自然地,你不能设置材料的不透明度。要启用它,你必须将混合模式更改为半透明。
让我们来看一下最常用的材料输入:
-
基础颜色:这与材料的颜色有关。底色将是什么颜色。
-
金属度:这涉及到你希望你的材料中有多少金属光泽。
-
高光:如果你想让你的材料光滑而有光泽,这就是你需要的节点。这涉及到材料反射多少光。
-
粗糙度:与高光相反,如果你希望材料不光滑或崎岖,这个输入就是你需要的。
-
自发光颜色:如果你希望你的资产发光,你可以在这里设置它,输入自发光颜色。
-
不透明度:这涉及到你希望你的物体有多少半透明。
还有其他输入,但这些是你现在应该知道的主要输入。
应用材料
有两种方法可以将材料应用到物体上。第一种方法是简单直接的。让我们使用第一种方法来应用地板材料。我们将应用M_Basic_Floor。要应用材料:
-
从内容浏览器中选择
M_Basic_Floor
。 -
将其拖放到地板表面上。
-
释放鼠标左键,材料将被应用到地板上。
我们将使用第二种方法来为墙壁涂抹材料。我们将把M_Basic_Wall
应用到我们的墙壁上。要做到这一点,请按照以下步骤进行:
-
选择任何一个墙面。
-
在详细信息面板中,在表面材料部分,你会看到一个名为Element 0的东西。它旁边会有一个菜单按钮,上面写着None。
-
打开菜单。你会看到内容浏览器中列出的所有材料。只需从列表中选择M_Basic_Wall,材料就会应用到墙上。
使用任何两种方法,将材料应用到游戏中的所有墙壁和地板上。
创建材料
现在我们已经了解了材料编辑器的用户界面,并看到了如何将它们应用到物体上,让我们继续创建我们关卡的材料。
基座
首先,我们将为玩家必须放置方块的基座创建一个材料。我们将创建一个相当简单的材料。我们将创建的基座将是黄色的,并且会有点闪亮。首先,在内容浏览器中创建一个新的材料,命名为Pedestal_Material1
。然后双击打开材料编辑器。
我们要做的第一件事是向Base Color输入添加一些内容。我们需要创建的是一个称为Constant3Vector节点的东西。要创建它,只需从Palette面板拖动节点并放置在Graph面板中。创建Constant3Vector节点的另一种更快的方法是按住3并在Graph面板的任何位置单击左键。节点将在您单击的位置形成。形成后,将其连接到Base Color输入。您可以将颜色设置为黄色。要做到这一点,只需选择Constant3Vector节点,在Details面板中,您将看到一个名为Constant的属性,旁边有一个黑色条。单击黑色条,将打开ColorPicker窗口。将颜色设置为黄色,然后单击确定。现在将其连接到Base Color输入。您将看到Viewport面板已更新为您所做的更改。
现在我们有了基本颜色,我们要添加光泽。为此,我们将创建一个Constant节点。同样,您可以从调色板面板拖动它,或者按住1并单击图形面板的任何位置。在详细面板中,将其值设置为0.5
,然后将其连接到Specular输入。您的图形编辑器将看起来像这样:
现在,您已经创建了材质,请单击保存,然后将其应用到基座上。
对于按钮所在的基座,通过右键单击Pedestal_Material1创建一个副本,选择Duplicate,将其重命名为Pedestal_Material2,在材质编辑器中,只需将基本颜色更改为蓝色,保存并应用。
门
对于门,我们要做的基本上与我们为基座创建材质时所做的事情差不多。这里唯一的区别是我们会让门稍微透明一些,并使材质更玻璃化。说到这里,为门创建一个材质,并将其命名为Door_Material。
在材质编辑器中,您需要做的第一件事是将材质的混合模式设置为半透明。之后,创建一个Constant3Vector,选择浅蓝色,并将其连接到Base Color输入。
现在,创建三个Constant节点。将第一个节点的值设置为1
,并将其连接到Specular输入。将第二节点的值设置为0.5
,并将其连接到Opacity输入。我们的玻璃材质现在是半透明的。然而,还有一些东西,玻璃的一个非常基本的属性——折射!折射输入位于输入面板的底部。将第三个Constant节点的值设置为0.35
,并将其连接到Refraction输入。
我们为门创建了一个基本的玻璃材质。保存并将其应用到门上。
关键立方体
让我们让一组材质变得有趣一些。我们将把它变成红色。此外,我们将使其闪烁以吸引玩家的注意。创建一个材质,并命名为KeyCube_Material。
首先,创建一个Constant3Vector节点,将颜色设置为红色,并将其连接到Base Color输入。这将是我们的基本颜色。对于发光效果,我们将使用线性插值函数。线性插值接受三个输入。它混合前两个输入(A和B),第三个输入用作掩码(Alpha)。对于输入A,创建您为基本颜色创建的Constant3Vector节点的副本并连接。对于输入B,创建另一个Constant3Vector节点,将颜色设置为较浅的红色并连接。
我们已经有了输入。现在我们需要为Alpha输入创建一些东西。由于关键方块将会定期闪烁,我们可以使用Sine或Cosine函数。您可以在调色板面板中找到其中任何一个。将它放在图形面板中,并连接到Alpha输入。现在,为了让Sine或Cosine函数真正起作用,它需要一些输入数据。我们将创建一个时间输入数据节点。只需在调色板面板中输入Time
,将节点放在图形面板中,并将其连接到Sine或Cosine节点。最后,在完成所有这些之后,将线性插值连接到发光输入。
现在,我们的主要关键方块有了一个闪烁的材质。将它应用到所有的关键方块上。
装饰性资产
对于我们的装饰性资产,我们将创建一个可以周期性改变颜色的材质。首先,创建一个材质并命名为DecorativeAsset_Material。对于变化效果,我们将使用Rotator节点。如果您有合适的纹理,并希望它旋转,可以使用这个节点。它获取纹理的UV坐标和时间函数,并用它来旋转纹理。我们将用它来改变我们的材质颜色。像往常一样,创建一个Constant3Vector,并将其颜色设置为浅蓝色。
现在,我们不是直接将它连接到基本颜色输入,而是将它连接到Rotator节点。在调色板面板中找到Rotator节点,并将其放在图形面板中。Rotator节点有两个输入,坐标和时间。将Constant3Vector连接到坐标输入。创建一个Sine函数,将时间输入数据连接到它,并将其连接到时间输入。最后,将Rotator节点连接到基本颜色输入。这就是我们需要做的全部。您现在会注意到材质会周期性地改变颜色。您可以通过在Rotator节点的“详细信息”面板中更改速度设置来设置它改变颜色的速度。
将这个材质应用到游戏中的所有装饰性资产上。有了这个,我们已经为我们的环境贴上了纹理。
如果您测试您的关卡,您会注意到您什么都看不见。这是因为我们的关卡没有任何灯光,因此没有任何东西被渲染,您所看到的只是一个黑屏。现在让我们继续进行照明。
照明
照明是任何游戏中非常重要的元素,因为没有它,您无法看到周围的世界。UE4 提供了四种类型的照明,即:定向光、点光、聚光灯和天空光。让我们逐个讨论它们,并讨论一些您可以在“详细信息”面板中设置的属性。
- 定向光:当您有一个室外场景并希望模拟来自太阳的光时,定向光是理想的光源类型,因为定向光模拟来自无限远处的光。定向光形成的阴影是平行的。
您可以在“详细信息”面板中设置诸如强度、颜色、是否影响世界、间接光照的强度等内容。
上述截图显示了定向光以及它在关卡中的工作原理。它的图标由一个太阳和两个平行箭头组成。另一个单独的箭头显示了光线的方向。您可以使用旋转工具来设置方向。
- 点光源:点光源模拟来自单一光源的光,均匀地在所有方向上发光,就像一个灯泡。这是我们在游戏中将要使用的主要光源。在室内场景中,这将是您的主要照明角色。
如你所见,点光源角色由一个灯泡表示。你看到的球体周围是衰减半径。它由一个球形线框表示,并显示了光源直接影响的范围。你可以设置强度、颜色、衰减半径、光源是否影响世界、间接光照强度等。如果你不想要单一点光源,你可以根据需要设置光源的半径或长度。
- 聚光灯:聚光灯与点光源类似,它们都源自单一光源。然而,两者之间的区别在于,点光源在所有方向均匀发光,而聚光灯在一个方向上,以锥形发光。
你可能已经注意到了两个锥体。内部锥体是光线最亮的地方。当你向外径移动时,朝向外部锥体,光线变得不那么明亮,发生衰减。你可以设置这两个锥体的半径,以及光源的强度、颜色、长度和半径等。
- 天空光:最后,我们有天空光。天空光模拟了大气和远处物体反射的光线。
天空光在效果上相当微妙。考虑到这一点,在前面的截图中,左边是有天空光的场景,右边是没有天空光的场景。当这两者并列时,你可以看到天空光的效果。
天空光的设置与其他类型的灯光有些不同。首先,你可以设置所谓的天空距离阈值。这是天空光角色距离任何角色被视为天空的距离。你还可以使用下半球为黑色选项,当切换时,将忽略场景下半球的光线。你还可以使用自定义立方体贴图来获得自己的天空光类型。除此之外,你还可以设置光的颜色、强度等。
移动性
所有类型的灯光都有三种移动性。在游戏运行时,你可以修改某些光源的设置。移动性部分允许你做到这一点。
移动性选项位于光源角色的详细面板的变换部分。
总共有三种类型可供选择:
-
静态:当你将光设置为静态时,制作游戏时设置的属性保持不变,无法通过触发器或游戏过程中进行修改。一旦光照建立完成,由该光照烘焙的光信息和阴影保持静态,无法更改。对于在游戏过程中不移动或切换开/关的灯光来说,这是最合适的移动类型,因为它需要最少的内存来渲染。
-
固定:当光源角色的移动性设置为固定时,只有强度、颜色等属性可以在触发器或游戏过程中进行修改。然而,光源在这种设置下无法移动或平移。这需要比静态光更多的内存,可以用于闪烁灯等场景。
-
可移动:在此设置下,光照 actor 完全是动态的,除了改变强度和颜色之外,在游戏过程中它还可以移动、旋转和缩放。然而,请记住,这种类型的光需要最多的内存来渲染,因为每次在游戏中改变其属性时,它都必须实时重新计算阴影和照明信息。因此,除非在您的游戏中真正需要,否则在开发移动设备游戏时避免使用可移动光。最好使用静态光以获得最佳性能。当您将移动性切换为可移动时,游戏中的光照 actor 的图标会改变。您会看到光照 actor 下面有四个箭头。
左边是移动性设置为可移动的光照 actor,右边是移动性设置为静态或固定的光照 actor。
照亮环境
现在您已经熟悉了光照 actor,它们的类型和移动类型,让我们在我们的关卡上放置一些灯光。
目前,我们只会在我们的关卡中放置静态点光源。我们稍后会介绍固定和可移动的灯光。说到这里,在关卡中放置一个点光源。将“强度”设置为20000
,“衰减半径”设置为5000
。还要将移动性设置为“静态”。创建多个点光源的副本并放置它们,记住应该为玩家提供足够的照明。您还应该切换到照明视图模式,以便您可以确定房间中是否有足够的照明。最后,构建关卡。您可以设置照明构建的质量。但请记住,您想要的光照质量越高,构建所需的时间就越长,但是在这些更高的设置下,照明将更接近反映生产质量。
现在您可以看到所有的材质和纹理都被正确渲染了。
总结
在本章中,我们讨论了项目,它们是什么,UE4 提供了哪些类型的项目,以及如何创建和加载项目。接下来,我们介绍了 BSP 刷子是什么,BSP 刷子的默认类型以及我们如何编辑它们以创建自己的几何图形。我们回顾了内容浏览器,如何导入和迁移资产,以及如何从内容浏览器将 actor 放置到关卡中。我们介绍了材质的概念,材质编辑器,其用户界面以及如何创建材质。最后,我们通过讨论照明,不同类型的灯光以及一些重要设置来结束了本章。
利用这些知识,我们创建了我们的环境,从而迈出了构建游戏的第一步。在下一章中,我们将讨论体积的概念,它们是什么,不同类型的体积以及我们如何在游戏中应用它们。因此,让我们毫不犹豫地继续下一章。
第四章:使用演员、类和体积
我们已经设置好了环境,所有必要的演员和物体都已经放置好了。还有其他同样重要,甚至更重要的对象(或演员),没有它们游戏就不完整。这些是具有特殊属性的视觉和基本类和体积的演员。有些对游戏至关重要,而有些则添加了特殊功能。在本章中,我们将看一些这些体积和类以及它们如何影响游戏。我们将涵盖以下主题:
-
基本类
-
视觉效果
-
体积
-
所有类
基本类
我们将从基本类的介绍开始。这些可以在“模式”面板的“基本”部分中找到。
这包含了几乎所有游戏都必不可少的最基本的类。让我们来看看它们:
-
空演员:演员是放置在游戏世界中的任何对象。所有的物体、灯光、摄像机、体积等都是演员。空演员是一个空的实体,你可以放置在你的关卡中。它没有任何固有属性。
-
空角色:一个空角色没有网格或任何动画,只有一个碰撞胶囊。
-
空幻影:幻影是一个可以被玩家或 AI 控制的演员。游戏中的角色、所有的敌人、盟友和 NPC 都是幻影。
-
玩家起始:顾名思义,玩家起始是玩游戏时玩家生成的地方。如果关卡中没有玩家起始演员,玩家将生成在世界的原点(
0
,0
,0
)处。 -
点光源:如前一章所述,点光源是最基本和最广泛使用的光源。你也可以从这里添加点光源演员。
-
立方体:这会在游戏中添加一个立方体原语(静态网格)。
-
球体:这会在游戏中添加一个球体原语。
-
圆柱体:这会在游戏中添加一个圆柱体原语。
-
圆锥体:这会在游戏中添加一个圆锥体原语。
-
盒触发器/球体触发器:下面的两个演员被合并在一起,因为它们具有相同的作用;唯一的区别是它们的形状。触发器简单来说就是为游戏添加交互性。你可以为触发器添加一个事件(例如,如果玩家触碰它,按下特定键等),当满足条件时,执行开发人员设置的特定动作。例如,你可以有一个触发器,当玩家触碰时,打开一个灯光等。UE4 提供了两种默认形状:盒和球体。你也可以创建自定义形状的触发器,但稍后再说。
将基本类演员添加到游戏中
现在你已经熟悉了基本类,让我们继续在我们的关卡中添加一些。
放置玩家起始演员
我们要放置的第一件事是玩家起始演员。它的位置至关重要,应该事先决定好。在我们的游戏中,我们希望玩家从第一个房间开始。记住这一点,将玩家起始演员拖放到第一个房间,远离门口。
演员由旁边有旗帜的游戏手柄表示。你可以看到它周围有一个胶囊形状的体积。这个胶囊是为了让你了解角色的大小以及游戏开始时的放置位置。所以确保胶囊不要与任何其他演员或表面重叠,否则会将图标更改为标有“尺寸不好”的标志。你可以使用“缩放”工具调整这个胶囊的大小,使其与角色匹配。
您可能还注意到了一个蓝色箭头和图标。箭头指向的方向是游戏开始时角色面对的方向(记住,W是平移工具,E是旋转工具,R是缩放工具)。您可以通过旋转操作改变这个方向。如果您点击“播放”按钮,角色将在演员放置的位置生成,并面向箭头指向的方向。
添加触发器
接下来,我们将添加触发器。我们将只使用框触发器来保持简单。要放置框触发器,只需从“模式”面板拖动它并放置在关卡上。我们将在下一章中介绍触发器的用途。现在,您只需将触发器放置在以下部分提到的位置即可。
始终为您的演员命名,无论是触发器、灯光、角色等等。这不仅被认为是良好的做法,而且会使您的项目更易阅读,保持一切井然有序,更易于跟踪。
房间 1
在第一个房间中,将第一个触发器放置在钥匙立方体附近。此触发器将用于与钥匙立方体交互。此触发器(或任何触发器)的放置和尺寸都很重要,因为它们决定了玩家可以与钥匙立方体交互的距离。例如,如果触发器太大,玩家将能够从远处拾取钥匙立方体,这不是我们想要的。我们希望玩家在可以拾取之前相对靠近或相邻于钥匙立方体。
记住这一点,放置触发器并设置尺寸,使其包围整个钥匙立方体(以便玩家可以从任何方向拾取),并使其更高(以便玩家不必直接看着钥匙立方体才能拾取;否则,这会很烦人)。最后,使触发器比钥匙立方体更大。设置完成后,它应该看起来像以下截图:
在这个房间中,在基座上添加下一个触发器。这是玩家必须将钥匙立方体放置在此处才能打开门。
再次,拖放一个框触发器,并将其放置在基座上方。与之前为钥匙立方体设置触发器时一样,设置此触发器的尺寸,使玩家可以从任何方向与之交互,而不必站在旁边才能与之交互。
要检查触发器的放置位置以及其位置和尺寸是否正确设置,您可以首先取消隐藏触发器演员,方法是取消选中“游戏中隐藏的演员”选项——在触发器的“详细信息”面板中找到,然后播放关卡。现在,就触发器的放置而言,这样就可以了。现在让我们继续进行到第二个房间。
房间 2
在第二个房间中,将第一个触发器放置在房间中央的大门附近。现在,我们希望玩家可以从任何地方打开门。记住这一点,将触发器放置在整个门的长度和宽度范围内。同样,调整宽度时要考虑您希望玩家与门交互时的距离。
接下来,在基座上放置下两个触发器,与其他房间中的情况类似。由于基座具有相似的尺寸,您可以通过在上一个房间中复制它们来放置触发器。
我们不会像在上一个房间中那样在钥匙立方体上放置任何触发器。这背后的原因将在下一章中解释。
房间 3
在第三个房间中,我们有几个基座,上面将放置按钮。因此,我们需要触发器进行交互。同样,不要在钥匙立方体上放置触发器。
房间 4
最后,在第四个房间,与之前的房间一样,在所有基座和门上放置触发器。
我们现在已经放置了游戏所需的大部分触发器。我们以后会添加更多。有了这些,我们已经将基本类放置到了我们的关卡中。现在让我们继续进行视觉效果类的操作,看看它如何影响我们的游戏。
视觉效果
由于我们在上一章已经涵盖了光类,我们将跳过它,直接进入视觉效果类。视觉效果类包含影响游戏视觉的角色。虽然不是游戏的必要组成部分,但它们有助于提高游戏的整体质量。
此外,它们不需要太多的内存。
视觉效果类中有各种角色:
-
后期处理体积: 这是一个可以用来操纵游戏外观和感觉的角色。效果将在玩家在体积中时生效。有许多可用的效果。一些例子包括抗锯齿(去除角色的硬边,使它们更加平滑),泛光(在现实生活中,当看着一个明亮的物体在较暗的背景下时会看到),景深(根据物体与焦点的距离模糊物体),等等。通过使用后期处理体积,你可以为你的游戏添加多种效果;所以尝试使用体积来看看你可以做些什么。
-
大气雾: 在室外关卡中,仅仅拥有天窗是不足以提供逼真的室外场景的。实际上,来自太阳的光线会因为地球的大气层而散射和传播。为了在游戏中产生这种效果,你需要在关卡中添加大气雾角色。你可以设置属性,比如太阳倍增器(用于增亮雾和天空),默认亮度(用于设置雾的亮度),默认光颜色(用于设置大气的颜色),等等。
-
指数高度雾: 你可以使用这个角色在你的关卡中添加雾和薄雾。这也主要用于室外场景。你可以设置属性,比如雾密度,雾的颜色,雾高度衰减(随着高度的增加,雾的密度如何减少),等等。
-
球形反射捕获: 这是另一个有用的工具。球形反射捕获角色获取光照信息并提供逼真的反射效果,使材质具有光泽的效果。金属材料和类似的材料依赖于这个角色来提供逼真的效果。在角色的设置面板中,你会看到一个叫做影响半径的东西,它是角色的影响范围。你可以增加或减少它。在下面是亮度设置,你可以用它来设置你想要的反射亮度。请记住,如果你改变了关卡中的光照(移动它,改变亮度,改变颜色等等)或者移动了角色,球形反射捕获角色不会自动更新。你需要手动更新它,你可以通过位于影响半径选项上方的更新捕获按钮来做到这一点。
-
盒形反射捕获: 这与球形反射捕获类似。唯一的区别是,球形反射捕获角色具有球形影响区域,而盒形反射捕获角色具有立方体影响区域,使其相对于球形反射捕获角色的效果较弱。这个角色最适合用在走廊或立方体房间中。它的设置与球形反射捕获角色相同,只是它有一个盒过渡距离,可以用来增加或减少它的影响范围。同样,与球形反射捕获角色一样,如果你改变游戏中的光照或物体,你需要点击更新捕获按钮来更新反射。
-
延迟贴花:延迟贴花角色提供了一种简单且廉价的方式来在物体上添加贴花。这是一个很好的方法,可以添加血迹等效果。您可以选择要用于贴花的材质,并将其放置在关卡上。
将视觉效果角色添加到游戏中-后期处理体积
我们要添加到关卡中的第一件事是后期处理体积。当玩家拾取钥匙方块时,我们希望给他们一个视觉指示,表明他们已经拾取了它。在这种情况下,视觉指示是屏幕上的闪光。要添加角色,只需从面板中拖动它并将其放置在关卡上,覆盖在钥匙方块上。后期处理体积由浅粉色的立方体表示。
放置后期处理体积后,让我们在详细信息面板中设置一些属性。在此面板中,您将看到许多选项。所有这些选项都是根据它们创建的效果类型进行分类的。需要注意的一点是,其中一些效果在移动设备上不可用。
我们只会调整全局照明设置。在详细信息面板中,转到全局照明部分,您将看到两个设置:间接光照颜色和间接光照强度。
首先,通过选择它们来启用两种效果。然后,在间接光照颜色选项中,将颜色设置为任何您喜欢的颜色。在我们的情况下,我们将颜色设置为蓝色。您还可以将间接光照强度选项设置为任何您想要的值,但我们只会将其设置为1。
设置完成后,如果您走进体积,您会发现一切都变成了蓝色。这将是我们拾取方块时的效果:
现在,如果您测试游戏并走进立方体,一切都会变成蓝色,并且除非您走出体积,否则会保持蓝色。我们不希望那样。我们只希望屏幕在玩家拾取钥匙方块时短暂变蓝,然后消失。我们需要更改另一个设置。我们希望在游戏开始时禁用体积,并且只在玩家拾取钥匙方块时触发。我们将在下一章中介绍如何启用此设置。现在,转到详细信息面板,在后期处理体积部分,您会发现已启用选项已选中。只需取消选中;这将禁用后期处理体积。如果您现在选中它,您会发现屏幕不再变蓝。最后,在关卡中复制并放置后期处理体积覆盖在所有钥匙方块上。
体积
体积是具有特殊属性的角色。它们可以被视为不可见的触发器,每个触发器在玩家进入时执行不同的操作(取决于体积类型)。有各种类型的体积角色可用;每个进入时都具有不同的属性。体积只在编辑器模式中可见,而在实际游戏中不可见。因此,它们通常会与另一个角色一起出现。例如,名为造成疼痛的体积的体积,顾名思义,当玩家进入其中时会造成伤害。显然,开发人员会在玩家走过危险区域时使用此体积,例如火灾、电击等。因此,体积将被放置在周围。火灾将作为视觉提示,表明该区域不安全,而造成疼痛的体积将处理其余部分(对玩家造成伤害)。
用户可以使用不同类型的体积。让我们来看看它们。
-
音频体积:音频体积允许您通过调整其设置来控制游戏中的音频。
-
阻挡体积:阻挡体积充当一个看不见的墙,阻止某些类型的角色通过。您可以在详细信息面板中设置哪些类型的角色可以通过,哪些类型的角色不能通过。
-
相机阻挡体积:这可以防止相机角色穿过它。
-
剔除距离体积:这是一个优化工具,根据物体距离摄像机的距离不渲染小于或等于开发人员设置的值的物体。这是一个重要的工具,特别是如果您有一个广阔的室外场景,因为它不会渲染远处的物体,从而节省内存。
-
杀死体积:这会摧毁进入其中的任何角色,包括玩家。这可以在玩家从悬崖边掉下,掉入坑等情况下使用。
-
级别流式传输体积:这是另一个优化工具,您可以使用它来设置玩家可见的级别部分。当您有巨大的级别时,这非常有用。您可以使用此体积隐藏玩家当前位置看不到的级别部分或远离他/她的部分。
-
Lightmass 角色间接细节体积:它获取光照信息并在体积内生成间接光照图。
-
Lightmass 重要性体积:另一个优化工具,Lightmass 重要性体积用于在其中生成光照信息(间接光照,阴影等)。建议在游戏级别周围放置 Lightmass 重要性体积以加快光照构建速度。
-
导航网格边界体积和导航修改器体积:导航网格边界体积用于 AI 在级别中移动。放置后,AI 角色将在体积内的任何地方移动(前提是该区域首先是可访问的)。
导航修改器体积用于修改导航网格边界体积。您可以设置它,以便在导航网格体积内的某个区域被封锁,AI 角色将无法穿过它。
-
疼痛体积:这会对进入其中的任何玩家造成伤害。
-
物理体积:这是可以改变物理对象的某些物理属性的体积。例如,您可以启用/禁用称为水体积的设置:当启用时,模拟角色穿过水域,如沼泽。
-
后期处理体积:这与视觉效果部分中找到的体积相同。
-
预计算可见性覆盖体积:使用此体积,您可以手动覆盖游戏中角色的可见性。
-
预计算可见性体积:此体积与预计算可见性覆盖体积具有相似的功能,唯一的区别是此体积自动存储游戏中角色的可见性。
-
触发体积:这与之前讨论过的触发角色相同。一个区别是,触发角色以预定义的形状出现,而您可以使用编辑几何模式更改触发体积的形状。
关于体积,您还应该知道,就像 BSP 刷子一样,您可以编辑它们的形状以创建自己的自定义形状的体积。编辑的方式与 BSP 刷子的方式相同。在模式面板中,单击编辑几何模式将切换到编辑模式。完成后,您可以单击要更改并进行所需更改的任何体积。
向游戏添加体积
现在我们知道了体积是什么以及可用的体积类型,让我们继续向我们的级别添加一些体积。
Lightmass 重要性体积
建议使用 Lightmass 重要性体积,因为它可以减少渲染时间(光照构建时间)。我们将设置其尺寸,使其包围游戏中的四个房间。只需从模式面板拖动角色并将其放在屏幕上。
Lightmass Importance Volume 由一个黄色的立方体表示。设置其尺寸,使其包含游戏中的所有四个房间。
如果现在构建照明,您会注意到建筑过程所需的时间相对较短,房间外的区域现在完全黑暗。引擎现在主要关注体积内的内容,以产生高质量的照明,而体积外的任何内容在照明方面将质量较低。
Nav Mesh Bounds Volume
接下来,添加Nav Mesh Bounds Volume。如果您希望在游戏中有一个 AI 角色,Nav Mesh Bounds Volume是一个重要的组件。如前所述,该体积基本上是 AI 角色在其中移动和与世界互动的范围。在设计游戏时,您应该知道所有由 AI 控制的角色将在游戏中移动的位置以及他们可以与之交互的对象,然后相应地放置您的体积。
抓住Nav Mesh Bounds Volume并将其拖入屏幕。我们需要在房间 3 和房间 4 中使用这个体积。该体积由一个灰色的立方体表示。
房间 3
在坑上方和附近放置Nav Mesh Bounds Volume,与开关的基座相对。
在放置这个体积时,建议在显示菜单中打开导航。在视口工具栏中,点击显示并勾选导航选项,以在视口中显示它。一旦切换,您会看到体积内的任何表面、角色或任何其他物理对象(或它们的部分)都会在其上呈现出明亮的绿色。这是 AI 活动的视觉指示器。它将忽略体积外的任何东西:
如前所述,体积重叠的表面或对象的任何部分都将是绿色的。让我们继续进行到房间 4。
房间 4
在房间 4 中,我们需要一个大的 Nav Mesh Bounds Volume,几乎覆盖整个房间。放置体积并使用几何编辑模式移动其边缘。设置尺寸后,它应该看起来像以下的截图:
我们的 AI 角色现在将知道在关卡中移动的位置(绿色高亮显示的区域)。
所有类别
最后,我们有所有类别部分,其中列出了到目前为止我们讨论过的所有类别和体积。此外,还有一些角色未显示在前三个部分中,只能通过所有类别部分访问。
有许多这样的角色,其中一些超出了本指南的范围。我们只会谈论一些在所有类别部分中的角色:
-
环境声音角色:这是一个您可以用来在游戏中播放音频或音效的角色。它还模拟真实世界的声音,即您离源头越近,声音就会越大,反之亦然,您离源头越远,声音就会越微弱。
-
摄像机:摄像机角色是您通过它看到虚拟世界的角色。默认情况下,您的角色类已经有一个摄像机,但如果您想导入自己的角色,摄像机角色是一个必不可少的组件。它还用于过场动画等。
-
默认角色:默认角色角色是一个简单的球形角色,具有内置的飞行机制、静态网格、球形碰撞等,您可以用于简单的 AI。
-
地形:在这里可以找到切换到地形模式的另一种方法。如果您从这里拖动地形角色并将其放在屏幕上,模式将切换到地形模式,在那里您可以放置您的地形。
-
关卡边界:关卡边界演员在关卡中放置时会自动更新和调整大小以囊括整个世界。它可以用于计算关卡和世界的大小。只需记住,如果您的关卡有天空盒或天空圆顶,该体积也会调整大小并包括其中。
-
Matinee 演员:Matinee 是用于创建电影、布景等的强大工具。添加 Matinee 演员有两种方法。第一种方法是通过视口工具栏。只需单击Matinee,然后在菜单打开时选择添加 Matinee。另一种方法是使用此选项。您可以从模式面板拖动演员并将其放置在关卡上。
-
导航链接代理:导航链接代理演员用于如果 AI 角色必须执行动作,例如从悬崖上跳下或跳跃,跳跃之间的间隙等。它允许 AI 角色暂时离开导航网格。(我们将在下一章回到这一点,当我们谈论 AI 时。)
-
目标点:目标点演员用于获取关卡中特定点的坐标。它们也可以用于 AI 角色。如果您希望 AI 角色沿着特定路径移动,或者让它巡逻特定区域,您应该使用目标点。此外,请记住,目标点应放置在 Nav Mesh Bounds Volume 内,否则 AI 角色将忽略它们,即使您已经编写脚本让其朝着所说的目标点移动。如果您希望角色传送到特定目的地,也可以使用目标点。
-
文本渲染:文本渲染演员,顾名思义,用于在游戏中渲染文本。如果您希望游戏中有弹出文本(用于教程或类似内容),这就是您应该使用的。您可以导入自己的字体并创建自己的文本渲染。
-
类蓝图:虽然不是单个特定的演员,但您在项目中创建的所有类蓝图都显示在这里。类蓝图究竟是什么将在下一章中讨论。目前,您需要知道和记住的唯一一件事是,您创建的所有类也可以从这里访问。
从所有类中添加演员
现在我们已经讨论了在所有类中找到的一些演员,让我们继续向游戏中添加其中一些。
摄像机
我们要添加的第一件事是摄像机演员。作为教程的一部分,我们将制作一个小的过场动画,在其中当玩家将钥匙立方体放在基座上时,我们将展示门的打开(以便玩家了解钥匙立方体的用途和作用)。
因此,从所有类面板中拖动CameraActor并将其放置在关卡上。完成后,设置它以面向门。以下截图是您可以放置摄像机的示例位置:
屏幕右下角的小窗口显示了从第二摄像机的视图,您可以使用它来正确调整其位置,直到您可以清楚地看到门。每当您选择任何CameraActor时,该窗口都会打开,显示您从所选CameraActor的视图。我们将在后续章节中创建过场动画时需要这个。
Matinee 演员
我们还将放置几个 Matinee 演员。我们不打算通过脚本(或在这种情况下,蓝图)移动我们的门和平台,而是打算借助 Matinee 实现这些功能。我们将在虚幻 Matinee中制作门的打开和动画的绘制,并在玩家与适当的触发器交互时调用它。
要添加 Matinee 演员,请从模式面板中拖动它并将其放置在门附近。
注意
虽然放置 Matinee 演员的位置并不重要,为了避免混淆并使事情更加方便,您应该将其放置在您希望使用 Matinee 移动或编辑的演员附近。
只需像这样放置动画演员来控制所有的门。我们还需要放置更多的动画演员,但我们稍后会这样做。
目标点
接下来,我们将放置一对目标点演员。如前所述,目标点对于移动 AI 角色非常有用。我们将有一个非常简单的 AI,它沿着指定的路径移动,在触发开关时停止,并且如果掉入坑中则重新出现。
房间 3
在房间 3 中,放置两个目标点:一个是 AI 角色最初的位置,另一个是开关的位置。当 AI 角色掉入坑中时,它将重新出现在第一个目标点。当玩家激活它时,AI 角色将前往第二个目标点。
这些演员由一个小的目标图标表示。现在让我们把它们放在房间 4 中。
房间 4
在房间 4 中,我们将放置一对目标点演员,因为 AI 角色将采取更多的非线性路径。
前面的截图是房间 4 的俯视图。玩家将从左侧开始,并且必须引导 AI 角色朝右侧移动。此外,正如你所看到的,我们已经放置了七个目标点演员。AI 角色将走的路径由红线表示。完成这些后,我们已经完全放置了我们的目标点演员。通过这样做,我们已经在我们的关卡中放置了所有的类、体积和其他演员。
总结
在本章中,我们看了一些在模式面板中出现的对游戏功能至关重要的演员,以及一些增强整体体验的演员。
除了讨论它们,我们还在我们的关卡中放置了一些。我们现在离制作游戏很近了。在下一章中,我们将讨论蓝图——可能是我们指南中最重要的主题。没有它们,游戏中就没有互动性。所以,让我们在下一章开始编写脚本。
第五章:使用蓝图编写脚本
现在我们来到游戏中最重要的一个方面:互动性。没有它,我们的游戏只是玩家可以在其中移动的环境。以前使用过 UDK 的人可能已经熟悉视觉脚本的概念。UDK 有一个称为 Kismet 的强大的视觉脚本工具。这个工具的一个非常吸引人的特点是任何人都可以在没有任何编程知识的情况下使用它。您只需要知道您希望实现的事件背后的逻辑。您甚至可以在不写一行代码的情况下创建一个完整的游戏。
在虚幻 4 中,我们有蓝图,这在某种程度上是对 Kismet 的升级。基本设置是相同的:您有各种节点和表达式,可以用来编写游戏事件、动作等。界面简单易懂,易于使用,但功能强大。一旦掌握了它,您就可以创建复杂的序列和事件。
然而,尽管蓝图是一种易学易用的工具,但在功能上仍然存在一定的局限性。在这方面,C++比蓝图更加灵活和多功能。C++非常适合实现复杂的交互和机制,而蓝图可能提供或可能不提供。蓝图和 C++之间的另一个区别是,蓝图执行速度比 C++代码慢得多,但只有在游戏中有大量蓝图脚本时才会注意到这一点。蓝图和 C++之间还有其他几个区别;但最终都取决于您对游戏中所需功能、机制和功能的个人偏好。您可以选择使用其中一个或两者兼而有之。
在本章中,我们将涵盖以下主题:
-
蓝图是什么以及它们的工作原理
-
什么是级别蓝图以及如何使用级别蓝图进行脚本编写
-
级别蓝图用户界面
-
蓝图类是什么以及如何在游戏中使用它
-
如何编写基本 AI
蓝图的工作原理
蓝图中的脚本与创建流程图类似。您可以连接各种节点以创建动作序列。为了正确地在蓝图中编写脚本,您应该首先了解所需序列背后的逻辑。例如,假设您想要实现一个灯,当您靠近它时打开,当您远离它时关闭。在这种情况下,您首先会在灯周围放置一个触发器。然后,这背后的逻辑将是:
-
如果玩家与触发器重叠,灯将被打开。
-
如果玩家没有与触发器重叠,灯将被关闭。
现在我们已经找到了如何执行此操作,我们可以继续设置我们的节点。假设您的设置看起来像这样:
当角色走进箱形触发器时,天花板灯(聚光灯)将被打开。切换灯的蓝图将看起来像这样:
有各种类型的节点,您应该了解:
- 事件节点:红色条的节点是事件节点。这些在相应事件发生时被激活。它们通常在左上角有一个向右的箭头。
您还有输入事件节点,当玩家按下相应的输入时触发(例如,当玩家按下鼠标左键时开火)。
- 功能节点:蓝色顶部的节点是功能节点。通常在左上角有一个函数符号f,就像你在前面的截图中看到的那样。这些节点对演员或玩家执行特定操作。
有两种类型的功能节点:那些对演员产生影响的节点,以及返回特定值的节点。这些类型的节点具有绿色顶部(未在截图中显示)。这包括返回世界中演员的位置,返回演员的速度等。
- 引用或变量节点:屏幕截图中心的节点是一个变量节点(或引用)。当您希望函数节点作用于场景中的特定角色,或者如果您想要“获取”其某些属性,您需要在级别蓝图中创建其引用。变量节点也是如此。毫无疑问,变量在脚本或编码时起着非常重要的作用。因此,当您使用蓝图时,自然会创建变量。
在使用蓝图进行脚本编写时,请记住节点越少,性能越好。这也使您的工作区更有组织且更易于阅读。
当特定事件发生时,相应的事件节点会触发脉冲到其连接的任何节点。在我们的情况下,当玩家重叠触发器时,它将激活聚光灯的切换可见性功能(因为灯默认是关闭的,它将切换为开启)。当玩家停止重叠触发器(走出触发器)时,它将再次触发切换可见性功能(灯将关闭)。
前面的屏幕截图演示了事件发生时蓝图的功能。当玩家重叠触发器(左上角)时,相应的事件会触发脉冲到切换可见性功能,切换灯光开启。当玩家移出触发器或停止重叠时,相应的事件再次触发脉冲到切换可见性功能节点,切换灯光开启。
您实际上可以看到每当节点被激活时脉冲被触发。这使得调试非常容易,因为您可以看到哪个节点导致了问题,并相应地进行修复。
除了了解逻辑,您还应该知道哪些节点可用以及它们可以用来做什么。这需要时间和实践。
虚幻 4 中有两种蓝图:级别蓝图和蓝图类。
级别蓝图对于 UE4 来说就像 Kismet 对于 UE3 一样。您在项目文件中创建的每个级别或地图都将有其自己独特的级别蓝图。您可以使用级别蓝图控制与级别相关的一切,例如播放过场动画,在您的级别中编辑角色的属性(可见性、位置等)等等。
另一方面,蓝图类是包含各种组件和脚本的特殊角色。这些组件包括静态或骨骼网格、摄像机、碰撞组件、触发器和音频组件等。通过脚本,您可以设置它们的属性并确定它们如何与世界交互。蓝图类不是特定于特定级别的;因此,您可以在您项目中制作的任何地图或级别中使用它们。您还可以将它们导出到其他项目中。
让我们继续讲解级别蓝图的用户界面。
级别蓝图用户界面
以下屏幕截图显示了级别蓝图的用户界面。继续我们将界面分成各个部分的风格,界面被分成了几个部分,我们将逐个介绍。
选项卡和菜单栏
选项卡栏与所有其他窗口中看到的相同。就像在 Web 浏览器中一样,您可以看到哪些窗口是打开的,在它们之间切换,并从那里关闭任何窗口。
菜单栏是您可以访问所有通用命令和操作的地方。
-
文件:在此菜单中,您可以保存您的级别,打开内容浏览器中的任何资产,编译蓝图,启用源代码控制等等。
-
编辑:从此菜单中,您可以执行撤消上一个操作、重做操作、搜索特定节点或表达式等操作。
-
视图:在这里,您可以隐藏/显示未使用的引脚和未连接的引脚(通过它们连接节点),在事件图中放大和缩小。
-
调试:如果您的蓝图序列中有问题,您无法解决,您可以使用调试菜单中提供的选项来查找和解决问题。这包括添加断点、观察特定变量在特定点的值等。
-
窗口:在这里,您可以设置要显示的窗口和不想显示的窗口。您可以从窗口菜单中自定义布局并保存它。
-
帮助:从这里,您可以访问 Epic 官方关于蓝图的文档。您还可以从这里访问 Wiki 页面、论坛和答案中心。
工具栏
工具栏包含最常用的操作:
最常用的操作解释如下:
-
编译:每当您在事件图中添加、删除或编辑任何节点时,请务必点击编译按钮。它会编译所有节点和序列,如果有任何错误或警告,它会在编译器结果面板中通知您,然后您可以进行修复。此外,如果您有一个变量节点,为了设置其默认值,您首先需要编译。
-
搜索:当您有大型和复杂的序列,有几个连接的节点时,尝试找到特定节点或变量可能是一项繁琐和耗时的任务。为了避免这种情况,您可以点击搜索按钮,然后输入您想要查找的内容的名称。结果将默认显示在屏幕底部,编译器结果面板所在的位置(它将打开一个名为查找结果的新选项卡)。
-
类设置:点击这个按钮将在详细信息面板中打开蓝图设置,您可以在那里设置某些选项,比如添加描述、类别等。
-
类默认:在这里,您可以设置蓝图类的默认或初始值。
-
播放:类似于视口工具栏中的播放按钮,这将打开一个新窗口,您可以在其中测试您的游戏。游戏运行时,点击Esc按钮将关闭游戏并返回到编辑器。您可能会注意到按钮旁边有一个小向下的箭头。这将打开一个菜单,您可以在其中设置选项,比如您想要预览游戏的方式,玩家应该从哪里开始等等。
详细信息面板
在详细信息面板中,您可以设置各种节点和变量的属性。它提供设置,比如您想要的变量类型(布尔值、浮点数、整数等)、变量名称等。
编译器结果面板
任何具有编程知识的人都会知道什么是编译。当您编写的代码从您编写代码的语言转换为计算机理解的机器语言时,就会发生编译,以便可以执行。这通常由编译器处理。(如果您在级别蓝图中看不到编译器结果面板,请转到窗口,然后点击编译器结果。)
在编译器结果面板中,您可以看到编译器的输出日志。编译花费了多长时间,编译期间发现的任何错误,任何警告等都会显示在这里。
我的蓝图面板
在这个面板中,您可以看到您创建的所有事件、变量和事件分发器的列表。每当您创建一个事件节点,它都会显示在事件图下面。除此之外,您还可以创建各种函数、宏、变量等。要这样做,您可以点击添加新按钮,然后选择您想要创建的内容,或者点击名称前面的**+**按钮。
事件图
位于屏幕中央的事件图(也称为图编辑器)是您设置节点和序列的地方。默认情况下,已经设置了两个事件节点,即事件开始播放,在游戏开始时激活,以及事件 Tick,在每一帧激活。这两个事件不需要任何触发器来激活。
在顶部,您可以看到选项卡。在选项卡下方,左上角有两个箭头。您可以使用它们在图表之间切换。在中心,您可以看到层次结构和蓝图结构。在极右边,您可以看到缩放比例—换句话说,您已经缩放了多少。
下表列出了您应该了解和记忆的事件图的控件:
控制 | 动作 |
---|---|
鼠标左键单击 | 选择节点 |
左键单击+拖动 | 创建选择框 |
右键单击 | 打开操作菜单 |
右键单击+拖动 | 平移图编辑器 |
滚轮向上 | 放大 |
滚轮向下 | 缩小 |
C | 在选定的节点周围创建注释框 |
注意
尽管它是可视化脚本,但使用蓝图进行编写时仍然可能会变得非常混乱。因此,为了避免混淆并保持一切有序,建议在节点周围创建注释框。
在游戏中使用关卡蓝图
现在,我们已经了解了所有基础知识,可以开始编写游戏了。您应该知道的一件事是,随着游戏的进行,我们可能会添加更多的触发器和角色。
钥匙立方体拾取和放置
我们要编写的第一件事是玩家拾取钥匙立方体。现在,当玩家靠近钥匙立方体并在屏幕上点击它时,他们将能够拾取立方体。在我们的情况下,为了让玩家产生拾取钥匙的错觉,当玩家在屏幕上点击时,我们将销毁该角色。此外,我们将在底座顶部放置一个钥匙立方体的复制品,并在游戏开始时将其隐藏起来。当玩家拾取了立方体并且靠近底座时,在屏幕上点击将使立方体从游戏中显示出来,给人一种角色已经将钥匙放在底座上的印象。所以,让我们设置一下。首先,选择钥匙立方体,按住Alt按钮,并借助变换工具,拖出一个副本。将这个副本放在底座顶部。
在其详细信息面板中,在渲染部分下,选中游戏中隐藏的角色选项。这样做将在运行时隐藏游戏。
现在,让我们打开关卡蓝图。要做到这一点,点击视口工具栏中的蓝图,然后选择打开关卡蓝图。
现在,在这种情况下,事件是玩家在屏幕上轻触,或者在技术术语中,提供触摸输入。因此,在事件图窗口中,右键单击打开操作菜单,然后键入Touch
。这样应该可以找到并显示Touch事件节点。单击它以将其添加到事件图中。您可能会找到各种类型的Touch节点—您需要的是简单地说Touch的节点。
在InputTouch事件节点中,我们只关注Pressed输出引脚。当玩家在屏幕上按下时,Pressed引脚将被激活。
为了从场景中移除盒子,我们将使用销毁演员功能节点。因此,在图形编辑器中的任何位置右键单击,键入销毁演员
,然后点击结果(你也可以在实用工具部分手动找到它)。有了这两个节点后,将按下输出引脚连接到销毁演员输入引脚。现在,函数不知道它自己要销毁哪个演员。我们必须告诉它我们想要摆脱哪个演员。在蓝图术语中,我们必须创建一个对我们希望应用该函数的演员的引用。因此,在视口中,选择关键立方体。然后,在图形编辑器中,右键单击并选择创建对 TemplateCube_Rounded 的引用。
如果你的对象有不同的名称,而不是TemplateCube_Rounded,你会看到演员的名称。
这样做将创建一个带有演员名称的参考节点。将其连接到销毁演员目标引脚。
另一种方法是拖动参考节点的输出引脚,并将其释放到事件图中的任何位置。这样将打开一个菜单,你可以从中选择销毁演员节点。一旦创建,参考节点将自动连接到它。到目前为止,设置应该是这样的:
然而,这里有一个问题。如果你测试你的游戏,你会注意到无论你在屏幕上点击哪里,立方体都会被销毁。我们只希望当玩家足够靠近时才销毁立方体。
为了解决这个问题,我们要做的第一件事是在游戏开始时禁用输入。你可能还记得,当游戏开始时激活的事件节点事件开始播放已经存在于图形编辑器中。我们要在这个事件上附加一个禁用输入节点。右键单击并找到该节点,并将其连接到事件开始播放。
注意
虽然现在不是必需的,但如果你的游戏有多个玩家或控制器,你将不得不指定要禁用哪个玩家的控制器。首先创建一个获取玩家控制器节点,并将其附加到禁用输入节点中的玩家控制器。默认情况下,你所扮演的角色的玩家索引为 0。
如果你现在测试你的游戏,当你点击屏幕时,关键立方体不会被销毁(尽管角色会再次开始发射抛射物)。现在,回到我们的顺序,因为我们希望玩家只能在与我们放置在关键立方体周围的触发器重叠时才能拾取立方体,所以我们将在他们与触发器重叠时启用他们的输入。
选择触发器后,创建一个事件开始重叠节点。创建后,创建一个启用输入节点,并将其连接到事件开始重叠节点的输出引脚。
我们现在几乎完成了设置。如果你现在测试它,你会发现它的功能方式与我们打算的一样。然而,这还不完整。首先,如果你的房间里有多个关键立方体,当你点击其中一个时,它们都会消失。我们不希望这样;我们只希望玩家拾取的关键立方体消失。为此,我们将使用一个Gate节点。Gate节点用于根据你可以设置的某些条件来控制通过节点的脉冲。例如,你可以设置它在发生某个事件时打开,等等。例如,当玩家与触发器重叠时,它将打开门,允许脉冲通过它。
在事件图中的任何位置右键单击,然后键入Gate
。然后,点击放置它。你也可以在实用工具 | 流程控制 | Gate下找到它。
您希望控制的事件与Gate节点的Enter输入相连。其余的事件用于控制流程。将Close输入连接到事件将会阻止任何东西通过Gate当事件发生时。同样,将Open输入连接到事件或功能将允许脉冲通过节点。Toggle节点将打开Gate节点(如果最初关闭)或反之亦然。最后,您有一个Start Closed引脚,它设置了Gate节点的初始状态。如果选中,它最初将关闭,取消选中则最初将打开。
首先,断开Pressed引脚与InputTouch节点的连接,而是将其连接到 Gate 节点的Enter引脚。然后,将Exit引脚连接到Destroy Actor函数的输入引脚。完成后,我们需要一个事件来打开 Gate 节点。这个事件是玩家与触发器重叠时。因此,将Enable Input节点的输出引脚连接到 Gate 节点的Open输入引脚(确保Start Closed已选中)。您的设置应该如下所示:
现在,当玩家走出触发器,也就是停止与触发器重叠时,我们再次希望禁用输入。因此,选择触发框,创建一个OnActorEndOverlap节点。您可以在搜索栏中输入或在<actor 名称> | Collision | Add On Actor End Overlap下找到它。还要创建一个Disable Input节点。同样,您可以输入或在Input | Disable Input下找到它。设置好一切后,我们应该得到以下结果:
现在我们有了一个简单的拾取动作。但在完成之前,我们还有更多工作要做。我们只是编写了拾取方块的脚本。我们还需要为玩家放置关键方块编写脚本。这很简单。
我们需要做的第一件事是添加一个重叠事件,以启用玩家的输入。将它们与之前的触发器连接方式相同。接下来,我们将添加另一个触摸事件节点。我们将连接一个Set Actor Hidden in Game节点。首先,选择另一个关键方块(在游戏中隐藏的那个),然后在Graph Editor中的任意位置右键单击,并通过搜索栏找到它。您还可以在<所选角色名称> | Rendering | Set Actor Hidden in Game中找到它。当您创建此节点时,将自动创建一个关键方块的引用节点,并连接到Target输入。接下来,将Pressed输出引脚连接到Set Actor Hidden in Game节点的输入引脚。完成后,添加一个Gate节点,将其Toggle输入连接到Enable Output节点的输出。
最后,创建一个OnActorEndOverlap节点,并像之前的触发器一样连接一个Disable Input节点。
如果您进行测试,您会发现它完美地运行。但是,这里有一个问题:我们没有设置玩家何时可以放置或显示底座上的关键方块的条件。换句话说,如果玩家只是走到底座旁,而没有拾取第一个关键方块,他们仍然可以显示其他关键方块,因为这意味着玩家可以在不拾取关键方块的情况下通过房间。
为了解决这个问题,我们首先要改变基座上触发器的一些属性。我们需要首先关闭触发器的碰撞。我们将设置它,使得最初,基座上的触发器忽略所有类型的重叠事件,换句话说,将其关闭。要这样做,选择基座上的触发器,在详细面板中,转到碰撞部分。在这个部分下,你会看到一个名为碰撞预设的选项。默认情况下,它将被设置为触发器。点击条以打开预设菜单。从这里,选择自定义。
接下来,点击碰撞预设旁边的小三角,以打开触发器对不同类型角色的碰撞响应列表。有三种一般的响应:
-
忽略:触发器不会对碰撞做出任何响应。触发器设置为忽略的角色既不会被阻挡,也不会被它注册。
-
重叠:触发器设置为重叠的角色不会被它阻挡,但碰撞会被它注册。这种碰撞注册是我们能够编写脚本的方式,比如当玩家重叠触发器时开灯。
-
阻挡:触发器设置为阻挡的角色将无法通过它。它会像一堵墙一样。
你可以为每个角色单独设置所需的响应,也可以选择所有角色所需的一般响应。我们将选择后者。在最顶部,有一个名为碰撞响应的选项。在它前面,有三个框,分别对应每种响应类型。简单地勾选忽略框,下面的所有内容都将被设置为忽略。这就是我们想要的。我们希望触发器最初忽略所有角色的碰撞。当玩家拾取了关键立方体后,我们将改变它的碰撞响应。
回到我们之前设置的拾取,我们需要向其中添加一些节点。在事件图中的任意位置右键单击,在流程控制部分,你会找到一个叫做序列的东西。选择并创建它。序列节点有一个输入和多个输出。如果你想要一个特定的节点来触发或设置各种不同的事件或功能,你应该使用序列节点。
默认情况下,序列节点有一个输入引脚和两个输出引脚。第一个节点首先触发,然后是下一个,依此类推。如果你想要更多的输出引脚,只需点击添加引脚,它将创建另一个输出引脚。现在,将门节点的输出引脚连接到序列节点的输入引脚。然后,将然后 0连接到销毁角色节点。
当玩家拾取了立方体后,我们将现在将触发器的碰撞响应改为重叠。选择触发器,右键单击它,首先取消选中上下文敏感框,它位于菜单右上角。当你在视口中选择一个角色并在图形编辑器中右键单击时,你可以看到的事件节点和函数节点通常与所选角色相关。它们只显示可以直接应用于角色的函数和表达式。否则,蓝图提供了相当多的节点,但其中一些不能直接或根本不能用于所选角色。
我们需要的节点是一个可以应用于触发器的节点,但不是直接的。我们需要的是一个设置所有通道的碰撞响应节点。这个节点可以用于在运行时改变角色的碰撞响应。在事件图中右键单击,输入节点的名称并创建它。
在这里,您可以设置希望更改其碰撞响应的目标角色。如果单击下拉菜单,您将看到三种设置:忽略、重叠和阻挡。如果您回忆一下,这些是触发器碰撞部分中的三种响应类型。我们将其设置为忽略,但是我们希望在玩家拾起钥匙立方体后将其更改为重叠。因此,在下拉菜单中选择重叠。接下来,将然后 1引脚连接到此节点的输入。最后,选择视口中的触发器,在图形编辑器中右键单击,勾选上下文敏感框,并为选择创建引用。将其连接到设置所有通道的碰撞响应节点的目标输入。当您这样做时,您会发现它并不直接连接到目标输入。相反,会创建一个新节点,该节点以触发器的引用作为其输入,并将碰撞组件作为其输出。这样做的作用是将触发器框转换为称为基本组件引用的东西。这是您可以将其连接到此节点的唯一方法。
如果我们现在测试游戏,我们会发现事情正在按照我们想要的方式运行。我们将无法在没有先拾起它的情况下放置钥匙立方体。
我们在这里的设置几乎完成了。记得我们在钥匙立方体周围放置了一个后期处理体,它将作为玩家拾起钥匙立方体的视觉指示器?我们也需要对其进行脚本编写。我们最初将其设置为禁用状态。我们将通过蓝图启用它,然后在非常短的时间后销毁它。首先,向序列节点添加一个新的引脚。接下来,选择后期处理体,在图形编辑器中右键单击并为其创建一个引用。然后,单击其输出引脚,拖动它并释放左鼠标按钮以打开菜单。在这里,您可以输入设置启用,这将创建一个布尔节点(布尔节点为红色)。创建后,您将看到一个复选框,上面写着启用。选中该框,并将其连接到序列节点的然后 2输出引脚。
接下来,我们需要在短暂的时间后销毁角色。为此,我们需要创建一个延迟节点。延迟节点接收输入,并在一定时间后触发脉冲(您可以设置)。在图形编辑器中右键单击,输入延迟并创建它。您还可以在实用工具 | 流程控制 | 延迟下找到它。节点中有一个名为持续时间的选项。在这里,您可以设置在触发脉冲之前要等待多长时间。现在,将其保留在默认值(即0.2
秒),并将其连接到设置启用节点。最后,创建一个销毁角色节点,将其连接到延迟节点,并将后期处理体设置为其目标。您可以通过单击Ctrl + C选择设置启用节点的后期处理引用,然后Ctrl + V)创建一个副本并将此副本连接到销毁角色节点的目标输入。
就是这样!我们为我们的钥匙立方体设置了拾取和放置系统。我们还有一个视觉指示器,表明我们已经拾起了立方体(我们将在下一章中介绍如何编写门的开关)。尽管这是一个相当简单和小的设置,但为每个钥匙立方体都这样做将是一项繁琐的工作。想象一下,如果您的游戏有 10…20…50…100 个房间!您将不得不为游戏中的每个钥匙立方体编写脚本,并浪费大量时间。幸运的是,UE4 提供了一些方法来解决这种情况:蓝图类。
蓝图类
如前所述,为每个关键立方体编写脚本将是一项乏味且耗时的任务。使用蓝图类,您只需要进行一次所有脚本编写和其他操作。蓝图类是一个包含在其中进行脚本编写的演员(静态网格、体积、摄像机类、触发盒等)的实体。再次看看我们的例子,比如灯的开关,假设您想放置 10 盏这样的灯。使用蓝图类,您只需创建并编写一次,保存并复制。这真是 UE4 提供的一个令人惊叹的功能。
创建蓝图类
要创建蓝图类,请单击视口工具栏中的蓝图按钮,在下拉菜单中选择新建空蓝图类。然后会打开一个窗口,询问您选择父类,指示您希望创建的蓝图类的类型。
在顶部,您将看到最常见的类。它们如下:
-
演员:如前所述,演员是可以放置在世界中的对象(静态网格、触发器、摄像机、体积等都算作演员)
-
棋子:棋子是可以由玩家或计算机控制的演员
-
角色:这类似于棋子,但具有四处走动的能力
-
玩家控制器:负责在游戏中为棋子或角色提供输入或控制
-
游戏模式:负责游戏规则的所有内容
-
演员组件:您可以使用这个创建一个组件并将其添加到任何演员
-
场景组件:您可以创建可以附加到其他场景组件的组件
除此之外,还有其他类可供选择。要查看它们,请单击所有类,这将打开一个菜单,列出您可以创建蓝图的所有类。对于我们的关键立方体,我们需要创建一个演员蓝图类。选择演员,然后会打开另一个窗口,询问您希望将其保存在何处以及如何命名。将其命名为Key_Cube,并将其保存在蓝图
文件夹中。满意后,单击确定,演员蓝图类窗口将打开。
蓝图类用户界面与关卡蓝图类似,但有一些区别。它有一些额外的窗口和面板,如下所述:
-
组件面板:组件面板是您可以查看并向蓝图类添加组件的地方。空蓝图类中的默认组件是DefaultSceneRoot。它无法重命名、复制或删除。但是,一旦您添加了组件,它就会被替换。同样,如果您删除了所有组件,它也会回来。要添加组件,请单击添加组件按钮,这将打开一个菜单,您可以从中选择要添加的组件。或者,您可以从内容浏览器中拖动资产并将其放入图形编辑器或组件面板中,它将作为组件添加到蓝图类中。组件包括静态或骨骼网格、光源演员、摄像机、音频演员、触发盒、体积、粒子系统等。当您放置一个组件时,它可以在图形编辑器中看到,您可以在详细信息面板中设置其属性,如大小、位置、移动性、材质(如果是静态网格或骨骼网格)等。
-
图形编辑器:图形编辑器与关卡蓝图类似,但在蓝图类中有一些额外的窗口和编辑器。第一个窗口是视口,与编辑器中的相同。它主要用于放置演员并设置它们的位置、属性等。大多数工具您将在主视口(编辑器的视口)工具栏中找到,这里也都有。
-
事件图:下一个窗口是事件图窗口,它与级别蓝图窗口相同。在这里,你可以编写在视口中添加的组件及其功能(例如,在玩家靠近时脚灯的开关/关闭)。请记住,你只能编写蓝图类中存在的组件的功能。你不能直接使用它来编写不是类组件的任何演员的功能。
-
构建脚本:最后,还有构建脚本窗口。这也类似于事件图,你可以设置和连接节点,就像在事件图中一样。不同之处在于这些节点在构建蓝图类时激活。它们在运行时不起作用,因为那时事件图脚本起作用。你可以使用构建脚本来设置属性,创建和添加你希望在构建过程中改变的任何组件的属性,等等。
让我们开始为关键立方体创建蓝图类。
视口
我们需要的第一件事是组件。我们需要三个组件:一个立方体,一个触发盒,和一个后期处理体积。在视口中,点击添加组件按钮,在渲染下选择静态网格。它会向类中添加一个静态网格组件。现在你需要指定要添加到类中的静态网格。选择组件面板中选中的静态网格演员,在演员的详细信息面板中,在静态网格部分,点击无按钮,选择TemplateCube_Rounded。一旦设置了网格,它将出现在视口中。选择立方体,将其比例(位于详细信息面板中)从1
减少到0.2
沿着所有三个轴。
我们需要的下一件事是一个触发盒。点击添加组件按钮,在碰撞部分选择盒碰撞。添加后,将其比例从1
增加到9
沿着所有三个轴,并将其放置在这样的方式,使其底部与立方体的底部齐平。
构建脚本
你可以通过在详细信息面板中点击覆盖材质按钮,并选择关键立方体材质来设置其材质。然而,我们将使用构建脚本来分配其材质。切换到构建脚本选项卡。你会看到一个名为构建脚本的节点,默认情况下存在。你无法删除此节点;这是脚本开始的地方。然而,在我们可以编写它之前,我们需要创建一个类型为材质
的变量。在我的蓝图部分,点击添加新,在下拉菜单中选择变量。将此变量命名为关键立方体材质
,并在详细信息面板中将其类型从布尔(默认变量类型)更改为材质。还要确保勾选可编辑框,以便我们可以从蓝图类外部进行编辑。
接下来,从我的蓝图面板中拖动关键立方体材质变量,放入图形编辑器中,并在窗口打开时选择设置。将其连接到构建脚本节点的输出引脚。重复此过程,只是这次选择获取并将其连接到关键立方体材质的输入引脚。
在图形编辑器窗口中右键单击,然后在搜索栏中键入设置材料。您应该看到设置材料(静态网格)。单击它并将其添加到场景中。此节点已经引用了静态网格角色(TemplateCube_Rounded),因此我们不必创建引用节点。将其连接到设置节点。最后,从我的蓝图中拖动关键立方体材料,将其放入图形编辑器中,选择获取,并将其连接到材料输入引脚。完成后,点击编译。现在我们将能够在蓝图类之外设置立方体的材料。
让我们来测试一下。将蓝图类添加到关卡中。您将看到一个TemplateCube_Rounded角色添加到场景中。在其详细信息面板中,您将在默认部分下看到一个关键立方体材料选项。这是我们在构造脚本中创建的变量。我们在这里添加的任何材料都将添加到立方体上。因此,点击无,然后选择KeyCube_Material。一旦您选择它,您将看到立方体上的材料。这是使用构造脚本可以做的许多事情之一。目前,只有这样做。
事件图
现在我们需要脚本化关键立方体的功能。这与我们在级别蓝图中使用第一个关键立方体所做的基本相同,只是有一些小的不同。在事件图面板中,我们要脚本化的第一件事是当玩家重叠和停止重叠触发框时启用和禁用输入。在组件部分,右键单击框。这将打开一个菜单。将鼠标悬停在添加事件上,然后选择添加 OnComponentBeginOverlap。这将在图形编辑器中添加一个开始重叠节点。接下来,我们需要一个投射节点。投射节点用于指定要使用的角色。在图形编辑器中右键单击,添加一个投射到角色节点。将其连接到OnComponentBeginOverlap节点,并将另一个角色引脚连接到投射到角色节点的对象引脚。最后,添加一个启用输入节点和一个获取玩家控制器节点,并像在级别蓝图中一样连接它们。
接下来,我们将为玩家停止重叠框时添加一个事件。同样,在框上右键单击,然后添加一个OnComponentEndOverlap节点。与OnComponentBeginOverlap节点做完全相同的事情;只是在这里,不是添加启用输入节点,而是添加一个禁用输入节点。设置应该看起来像这样:
您可以移动我们之前放置在基座上的关键立方体,将其设置为隐藏,并将关键立方体蓝图类放在其位置。还要确保将触发器角色的碰撞响应设置为忽略。
下一步是脚本化当玩家触摸屏幕时销毁关键立方体。这也与我们在级别蓝图中所做的类似,有一些不同之处。首先,添加一个触摸节点和一个序列节点,并将它们连接在一起。接下来,我们需要一个销毁组件节点,您可以在组件 | 销毁组件(静态网格)下找到它。此节点已经在其中引用了关键立方体(静态网格),因此您不必创建外部引用并将其连接到节点。将其连接到然后 0节点。
在玩家拾取关键立方体后,我们还需要激活触发器。现在,由于我们无法直接在蓝图类外部的演员上调用函数(就像我们在关卡蓝图中可以),我们需要创建一个变量。这个变量将是Trigger Box类型。它的工作方式是,当您创建了一个Trigger Box变量后,您可以将其分配给关卡中的任何触发器,并且它将调用该特定触发器的函数。考虑到这一点,在我的蓝图面板中,单击添加新内容并创建一个变量。将此变量命名为Activated Trigger Box,并将其类型设置为Trigger Box。最后,确保您选中了可编辑框;否则,您将无法将任何触发器分配给它。在这样做之后,创建一个设置所有通道的碰撞响应节点(取消选中上下文敏感框),并将新响应选项设置为重叠。对于目标,拖动Activated Trigger Box变量,将其放入图形编辑器中,选择获取,并将其连接到目标输入。
最后,对于后期处理体积,我们需要创建另一个类型为PostProcessVolume的变量。您可以将此变量命名为Visual Indicator,同时确保可编辑框已被选中。将此变量添加到图形编辑器中。接下来,单击它的引脚,将其拖出并释放,这将打开操作菜单。在这里,键入Enabled,选择Set Enabled,并选中Enabled。最后,添加一个延迟节点和一个销毁演员,并按顺序将它们连接到Set Enabled节点。您的设置应该看起来像这样:
在视口中,您会发现在蓝图类演员的默认部分下,出现了两个新选项:激活触发框和视觉指示器(我们创建的变量)。使用这个,您可以指定要更改哪个特定触发框的碰撞响应,以及要激活和销毁哪个后期处理体积。在这两个变量的前面,您会看到一个眼睛滴管形状的小图标。您可以使用这个来选择您希望分配相应变量的外部演员。使用这些变量编写的任何内容都将对您在场景中分配的演员产生影响。这是蓝图类提供的众多令人惊叹的功能之一。现在我们只需要为剩下的关键立方体做以下几件事:
-
将它们放置在关卡中
-
使用位于变量名称旁边的眼滴图标,选择在玩家拾取关键立方体后要激活的触发器,以及要激活和销毁的后期处理体积。
在第二个房间中,我们有两个关键立方体:一个用于激活大门,另一个用于激活通往第三个房间的门。第一个关键立方体将放置在靠近大门的基座上。因此,选择第一个关键立方体,使用眼滴图标,为Activated Trigger Box变量选择靠近大门基座上的触发框。然后,为Visual Indicator变量选择放置关键立方体的后期处理体积。
我们需要做的下一件事是打开关卡蓝图,并编写当玩家将关键立方体放置在靠近大门的基座上时发生的事情。与前一个房间所做的一样,我们设置节点,将隐藏的基座上的关键立方体显示出来,并将大门周围的触发框的碰撞响应更改为重叠,确保最初设置为忽略。
测试一下!你会发现一切都按预期工作。现在,对剩下的关键立方体做同样的操作。选择触发盒和后期处理体积在触摸屏幕时激活。然后,在关卡蓝图中,编写哪个关键立方体要显示,等等(将之前放置在基座上的关键立方体设置为隐藏),并将蓝图类关键立方体放在其位置上。
这是使用蓝图类的众多方法之一。你可以看到这需要很多工作和麻烦。现在让我们继续进行人工智能的工作。
脚本化基本 AI
回到第三个房间,我们现在要在游戏中实现 AI。我们在第三个房间中有一个 AI 角色,当激活时会移动。主要目标是通过开关为其制作一条路径,并防止其掉落。当 AI 角色到达目的地时,它将解锁关键立方体,玩家随后可以拾取并放置在基座上。我们首先需要创建另一个Character类型的蓝图类,并命名为AI_Character
。创建后,双击打开它。你会看到视口中已经设置了一些组件。这些是CapsuleComponent(主要用于碰撞),ArrowComponent(用于指定角色的前面和后面),Mesh(用于角色动画)和CharacterMovement。所有这四个都是默认设置的,不能被移除。我们唯一需要做的是为我们的角色添加一个静态网格,它将是TemplateCube_Rounded。
点击“添加组件”,添加一个“静态网格”,并在其“详细信息”面板中分配“TemplateCube_Rounded”。接下来,将这个立方体沿着三个轴缩放为0.2
,并将其移动到CapsuleComponent的底部,这样它就不会漂浮在空中了。
这就是我们对 AI 角色的要求。其余的工作我们将在关卡蓝图中处理。接下来,将AI_Character放置在坑洞的玩家一侧,并放置所有开关。直接将其放置在目标点演员的正上方。
接下来,打开关卡蓝图,让我们开始编写脚本。最左边的开关将用于激活 AI 角色,其余三个将用于绘制路径的部分,以便它可以走到另一侧。
为了移动 AI 角色,我们将需要一个AI Move To节点。我们首先需要一个触发第一个开关的重叠事件,这将启用输入,否则 AI 角色将在玩家触摸屏幕时开始移动,这是我们不想要的。设置一个重叠事件,一个启用输入节点和一个门事件。将重叠事件连接到启用输入事件,然后连接到门节点的打开输入。
接下来要做的是创建一个触摸节点。我们将附加一个AI Move To节点。你可以输入它,也可以在 AI 部分下找到它。创建后,将其连接到门节点的退出引脚。
现在我们需要告诉节点我们要移动哪个角色,以及它应该移动到哪里。要指定我们要移动哪个角色,选择视口中的 AI 角色,在关卡蓝图的图形编辑器中,右键单击并为其创建一个引用。将其连接到Pawn输入引脚。接下来,对于位置,我们希望 AI 角色朝着坑洞另一侧的第二个目标点演员移动。但首先,我们需要获取它在世界中的位置。选择它,右键单击图形编辑器,输入获取演员位置
。这个节点返回世界中一个演员的位置(坐标)(连接到它的那个)。这将创建一个获取演员位置,将目标点演员连接到其输入引脚。
最后,将其返回值连接到AI 移动到节点的目的地输入。
如果你进行测试,你会发现它运行良好,除了一件事:当 AI 角色到达坑的边缘时会停止。我们希望它在没有路径时掉入坑。为此,我们需要一个Nav 代理链接角色。如前一章所述,当 AI 角色需要暂时离开 Nav Mesh(例如,在台阶之间跳跃)时,会使用Nav 代理链接角色。如果我们希望 AI 角色从悬崖上掉下来,我们将需要它。您可以在模式面板的所有类部分中找到它。将其放置在关卡中。
该角色由两个带有弯曲箭头连接的圆柱表示。我们希望第一个圆柱位于坑的一侧,另一个圆柱位于另一侧。使用缩放工具,增加Nav 代理链接角色的大小。
放置Nav 代理链接角色时,请记住两件事:
-
确保两个圆柱相交在绿色区域;否则,该角色将无法工作
-
确保两个圆柱与 AI 角色对齐;否则,它将不会沿直线移动,而是移动到圆柱所在的位置
放置后,您会发现当 AI 角色到达坑的边缘时会掉下来。我们还没有完成。我们需要将 AI 角色带回其起始位置,以便玩家可以重新开始(否则玩家将无法继续)。为此,我们首先需要在坑底放置一个触发器,确保如果 AI 角色掉入其中,它会重叠触发器。此触发器将执行两个操作:首先,它将将 AI 角色传送到其初始位置(借助第一个目标点);其次,它将停止AI 移动到节点,否则即使已被传送,它也会继续移动。
放置触发器后,打开关卡蓝图并为触发框创建一个重叠事件。为此,我们将添加一个Sequence节点,因为当玩家重叠触发器时,我们要调用两个单独的函数。我们要创建的第一个节点是Teleport节点。在这里,我们可以指定要传送的角色和位置。我们要传送的角色是 AI 角色,所以为其创建一个引用并将其连接到目标输入引脚。至于目的地,首先使用获取角色位置函数获取第一个目标点角色的位置(AI 角色最初放置在其上),并将其连接到目标位置输入。
要停止 AI 角色的移动,在图形编辑器中右键单击任意位置,首先取消选中上下文敏感框,因为我们不能直接在 AI 角色上使用此功能。我们需要的是停止活动移动节点。在搜索栏中键入它并创建它。将其连接到然后 1输出节点,并将 AI 角色的引用连接到它。它将自动从角色引用转换为角色移动组件引用。
这就是我们需要为第三个房间的 AI 编写的所有内容。还有一件事:如何解锁关键立方体。但我们将在下一章中介绍这一点,因为它涉及 Matinee。
在第四个房间,我们将使用相同的原理。在这里,我们将制作一系列AI 移动到节点,每个节点都连接到前一个节点的成功时输出引脚。这意味着当 AI 角色成功到达目的地(目标点演员)时,它应该移动到下一个目标,依此类推。利用这一点,以及我们刚刚讨论的关于 AI 的内容,编写 AI 将遵循的路径(回想一下上一章,在那里我们勾画了 AI 角色在第四个房间中将走的路径)。
总结
在本章中,我们介绍了蓝图并讨论了它们的工作原理。我们还讨论了关卡蓝图和蓝图类,并介绍了如何编写 AI 脚本。我们还有一些脚本要做,但首先我们需要讨论虚幻 Matinee 的主题。在下一章中,我们将做到这一点。