基于UE官方文档学习编写

基础知识

UE界面

首次打开UE5时,呈现的是关卡编辑器(Level Editor)的界面。

官方文档提供图片如下:
ue1

什么是关卡?
文档中指出,关卡(Level)是游戏世界的部分或者全部。关卡包含玩家可以看到并与之交互的所有内容。游戏中常常有多个关卡,彼此之间有划分明确的过渡。

UE将每个关卡保存为单独的.umap文件,因此有时关卡又被称为Maps。

组合起来创建关卡至少所需的元素有:
一个.umap文件,即关卡本身。可将其视为保存其他所有内容的容器。
一个由静态网格体Actor(Static Mesh Actors)组成的环境,例如树木、岩石、墙壁等。
一个由骨骼网格体Actor(Skeletal Mesh Actor)表示的玩家角色。
一个或多个不同类型的光源。
环境声音和音效。

复杂关卡可能还有粒子效果、视效后期处理、关卡流送等待。

菜单栏

编号为1的为菜单栏:
ue1
菜单栏可能位于编辑器窗口右上角。部分菜单项会出现在所有编辑器窗口中,如文件File、窗口Window、帮助Help

主工具栏

编号为2的为主工具栏:
ue1

主工具栏包含UE编辑器中最常使用的工具和命令的快捷方式。其中有:
保存按钮:保存当前打开的关卡

模式选择:用于在不同的模式之间快速切换、以编辑关卡中的内容,如选择、地形、植被、网格体、破裂、笔刷等,

内容快捷方式:
Create:创建/导入资产、放置Actor
蓝图:创建和访问蓝图
过场动画:创建关卡序列或主序列过场动画。

播放模式控制:包含在编辑器中运行游戏的快捷键方式

平台菜单:用于配置、准备项目并将其部署到不同平台

设置:包含虚幻编辑器、关卡编辑器视口和游戏行为的各种设置

关卡视口

编号为3的为关卡视口(Level Viewport),显示当前打开的关卡的内容。

关卡视口显示关卡内容的方式通常有两种:
视角:3D视图,可以从不同角度在视图中查看视口的内容
直角:2D视图,沿着一个主轴俯视。

内容侧滑菜单/内容浏览器

内容浏览器(Content Browser),显示项目中包含的所有资产、蓝图和其他文件,使用内容浏览器来浏览内容、将资产拖动到关卡中、在项目之间迁移资产以及执行其他操作。

内容侧滑菜单(Content Drawer),该按钮即位于UE的左下角,可以打开内容浏览器的一个特殊实例,非焦点状态下自动最小化。点击内容侧滑菜单中的停靠在布局中按钮,会创建内容浏览器的实例,但仍可打开内容侧滑菜单。

底部工具栏

ue1
和文档不同,除了输出日志、命令控制台、派生数据外,还显示有追踪、开始追踪、快照、编译、显示资产保存状态、版本控制。

输出日志:用于在程序运行时,输出有用信息的调试工具
命令控制台:输入控制台命令触发特定编辑器行为
派生数据:提供派生数据功能?

大纲

Outliner面板,显示关卡 中所有内容的分层视图。最多可以打开四个不同的大纲界面,每个大纲的布局和过滤设置都可以不一样。

通过关联的眼睛按钮,快速隐藏或显示Actor。

右键点击该Actor即可访问Actor的上下文菜单。然后,从该菜单中执行其他特定于Actor的操作。

可以创建、移动和删除内容文件夹

细节面板

Details

从关卡视口中选择一个Actor之后,细节面板将会显示影响所选Actor的设置和属性。

默认位于右侧大纲视图面板下

UE术语

项目

Project,UE5项目包含游戏的所有内容。
项目中的大量文件存储在磁盘上。内容浏览器面板显示与磁盘上Project文件夹相同的目录结构(显示的是项目目录下Content目录下的内容,C++项目还包含C++类)。

每个项目都有与其关联的.uproject文件

蓝图

UE中完善的gameplay脚本系统,在编辑器中使用基于节点的界面来创建gameplay元素。
它可以用在引擎中定义以Object为导向的类或Object。在使用UE时,使用蓝图定义的Object被统称为蓝图。

对象

Object是UE引擎中最基本的类(概念),它们像建造系统的砖块,包含资产的大量基本功能。UE引擎中几乎所有功能都继承自Object。
UE的C++中,UObject是所有Object的基类,可以实现垃圾回收、将变量提供给虚幻编辑器的元数据(UProperty)支持以及用于加载和保存序列化等。

Class中定义UE中特定Actor或Object的行为和属性。可以在C++代码中或蓝图中创建类。

Actor

Actor是可以放到关卡中的任何Object,例如摄像机、静态网格体或玩家出生点位置。Actor支持3D变换,例如转换、旋转和缩放。可以通过gameplay代码(C++或蓝图)创建或销毁Actor。
在C++中,AActor是所有Actor的基类。

类型转换

类型转换Casting是一种动作,将会提取特定类的Actor并尝试将其作为其他类进行处理。
类型转换可能成功,也可能失败。如果类型转换成功,则可以在你类型转换到的Actor上访问特定于类的功能。

例如玩家可以有多种体积类型,其中一个是火焰。当角色与关卡中任何体积重叠,尝试将体积转换到火焰上,如果转换成功,就可以尝试访问扣血功能。

组件

Component是一种可以添加到Actor的功能。
将组件添加到Actor时,Actor可以使用组件提供的功能。例如:
点光源组件、旋转移动组件、音频组件
组件必须连接到Actor,不能独自存在。

Pawn

Pawn是Actor的子类,作为游戏内的形象或人像。玩家或AI可以控制Pawn。Pawn被控制时,会将其视为被占有,相反会将其视为未被占有。

角色

Character是计划用作玩家角色的Pawn Actor的子类,角色子类包括碰撞设置、双足运动的输入绑定以及用于玩家控制动作的其他代码。

玩家控制器

Player Controller
玩家控制器获取玩家输入,并将其转换到游戏内的互动中。每个游戏内部都至少具有一个玩家控制器。玩家控制器通常操控一个Pawn或角色作为玩家在游戏中的呈现方式。

玩家控制器还是多人游戏的主要网络互动点。
多人游戏期间,服务器具有游戏中每个玩家的玩家控制器的一个实例,因为它还必须对每个玩家进行网络功能调用。
每个客户端都只有一个与玩家对应的玩家控制器,并且只能使用其玩家控制器与服务器进行通信。
关联C++类为PlayerController。

AI控制器

AI控制器操控Pawn在游戏中呈现非玩家角色。默认情况下,Pawn和角色都以基本AI控制器终结,除非它们被玩家控制器专门操控或者收到指令不允许为自己创建AI控制器。
关联C++类是AIController。

玩家状态

Player State,玩家状态是游戏参与者在游戏中的状态,例如名称、等级、血量、得分等。
多人游戏中,所有玩家的玩家状态都在所有机器中存在,可以将数据从游戏中复制到客户端以保持内容一致。不同于玩家控制器。
关联C++类是PlayerState。

游戏模式

Game Mode,游戏模式设置要运行的游戏规则。例如玩家如何加入游戏、游戏是否可以暂停、获胜条件等。
项目设置中可以设置默认游戏模式,针对不同关卡可以重载游戏模式,但每个关卡只有一个游戏模式
多人游戏中,游戏模式新存在于服务器上,规则将复制发送到每个连接的客户端。

关联C++类是GameMode

游戏状态

Game State
游戏状态是一个容器,包含你要在游戏中复制到每个客户端的信息。
可能包含与游戏得分相关信息、比赛是否开始、AI角色数量等。
对于多人游戏,每个玩家机器上都有一个本地游戏状态实例,本地游戏状态实例从游戏状态的服务器实例获取更新的信息。

笔刷

Brush
用于描述3D形状的Actor,例如立方体或球体。可以将笔刷放置在关卡中以定义关卡几何体(二进制空间分区或BSP笔刷)。

体积

Volumes是带有边界的3D空间,根据连接到体积的效果,具有不同的使用方法。
例如:
阻挡体积:可见,阻止Actor通过它们。
施加伤害体积:对与其重叠的任何Actor造成持续伤害。
触发器体积:在Actor进入或退出体积时触发事件。

关卡

Level
关卡是我们定义的gameplay区域。保存为.umap文件。

世界

World
世界是构成游戏的所有关卡的容器,处理关卡的流送和动态Actor的生成。

工具和编辑器

UE5中编辑器如下:

  • 关卡编辑器:搭建gameplay关卡,添加不同类型的Actor和几何体、蓝图可视化脚本、Niagara等来定义播放空间。
  • 静态网格体编辑器:预览外观、碰撞和UV贴图,以及设置和操控静态网格体。在静态网格编辑器中,也可以针对静态网格体资产设置LOD,以根据游戏运行方式和地点控制静态网格体资产出现的简洁程度或详细程度。即对一个Mesh右键进行编辑。Static Mesh Editor
  • 材质编辑器:创建和编辑材质的地方。材质是可应用于网格体以控制其视觉效果的资产。Material Editor。对一个Material右键编辑打开。
  • 蓝图编辑器:使用和修改蓝图的地方,在关卡编辑器主工具栏可以打开。这些特殊资产用来创建gameplay元素(控制Actor或对事件编写脚本),修改材质或执行其他UE引擎功能,省去编写代码的过程。
  • 物理资源编辑器:创建物理资产,以配合骨骼网格体使用。依托于骨骼网格体,为骨骼网格体创建资产。即要么在骨骼网格体导入时勾选创建物理资产,或者在内容浏览器创建物理资产并选择要使用的骨骼网格体。打开该编辑器,右键某个物理资产,点击编辑即可。
  • 行为树编辑器:可视化的基于节点脚本系统为关卡中的Actor编写人工智能脚本的地方。
  • Niagara编辑器:粒子系统,利用由分离粒子发射器组成的全套模块化粒子效果系统,为每个效果创建特殊效果。可将发射器保在内容浏览器中,以备后用。
  • UMG界面编辑器:视觉UI创建工具,可用来创建UI元素。在内容浏览器中添加选择用户界面(User Interface)的控件蓝图打开,并创建UI元素。
  • 字体编辑器:导入字体资源,编辑即打开字体编辑器,定义字体参数等
  • Sequencer编辑器:创建游戏过场动画。通过创建关卡序列、添加轨迹等操作
  • 动画编辑器:可以使用该工具编辑骨骼资产、骨骼网格体、动画蓝图,以及其他各种动画资产。右键骨骼网格体编辑打开
  • Control Rig编辑器:动画工具套件,用于直接在引擎中操纵角色并实现动画。即直接在UE中制作动画。
  • Sound Cue编辑器:通过它编辑音频
  • 媒体编辑器:定义媒体文件或URL
  • nDisplay 3D配置编辑器:在多个同步显示设备上渲染虚幻引擎场景,如能量墙、穹顶和曲面界面。
  • DMX库编辑器:在整个实时事件行业用来控制各种设备的数字通信标准。

目录结构

一个是UE引擎本身的目录,一个是游戏项目文件的目录。
最高级目录指的一般是引擎目录(Engine)以及游戏项目目录。

根目录

Engine目录下包含构成引擎的所有源代码、内容等
Templates目录下包含创建新项目可用的项目模板集合

通用目录

Binaries:包含可执行文件或编译期间创建的其他文件
Build:包含编译引擎或游戏所需的文件,包括为某些特定平台创建项目版本时所需的文件
Config:配置文件,包含的参数可以控制引擎的行为。游戏项目的Config文件会对Engine/Config产生覆盖
Content:保存引擎或游戏中的内容,例如资产包、贴图
DerivedDataCache:包含派生数据文件。这类数据专为被引用内容生成,并且在加载时生成。假如被引用内容未生成过缓存文件,则加载时间会显著增加。
Intermediate:包含编译引擎或游戏时生成的临时文件。在游戏目录中,着色器也会保存在Intermediate目录中。
Plugins:包含引擎中使用的插件
Saved:包含自动保存文件、配置.ini文件和日志文件。
Source:包含引擎或游戏的所有源文件,包括引擎源代码、工具和游戏类等。

Engine中的Source包含如下结构:
Developer:编辑器和引擎共同使用的文件
Editor:仅供编辑器使用的文件
Programs:引擎或编辑器使用的外部工具
Runtime:仅供引擎使用的文件

Game中的Source按模块分组,一个模块对应一个目录。(实际创建一个FPS模板的项目时,.h和.cpp就被放在了一起)
模块总共有Classes、Private、Public
Classes:包含所有的头文件.h
Private:包含所有的源文件.cpp,包括游戏逻辑类以及各种模块的实现文件
Public:包含模块的头文件?