前言
本页面为熟悉Unity的用户概述了 虚幻引擎(UE)。如果你具备一些Unity知识,而且想学习如何运用自己所学的知识在虚幻引擎中工作,下面各小节将帮助你入门。
下面的截图并排显示了Unity和虚幻编辑器。各个区域采用相同的颜色来表示相同的功能。每个区域上还添加了名称,以便你了解它们在虚幻引擎语境中的称呼。
术语简表
下表左侧是Unity中常见术语,右侧则是对应的(或近似的)虚幻引擎术语。虚幻引擎(Unreal Engine) 列中的每个术语都链接到专门的页面,你可以前往这些页面了解详情。
类别 | Unity | 虚幻引擎 |
---|---|---|
Gameplay类型 | Component | 组件 |
GameObject | Actor | |
Transform | SceneComponent,RootComponent | |
MonoBehavior | ActorComponent | |
Prefab | 蓝图类 | |
编辑器界面 | Hierarchy Panel | 世界大纲视图 |
Inspector | 细节面板 | |
Project Browser | 内容浏览器 | |
Scene View | 关卡视口 | |
网格体 | Mesh | 静态网格体 |
Skinned Mesh | 骨骼网格体 | |
材质 | Shader | 材质、材质编辑器 |
Material | 材质实例 | |
特效 | Particle Effect | 特效、粒子、Niagara |
游戏界面 | UI | UMG(虚幻示意图形) |
动画 | Animation | 骨骼网格体动画系统 |
Mecanim | 动画蓝图 | |
Sequences | Sequencer | |
2D | Sprite Editor | Paper2D |
编程 | C# | C++ |
Script、Bolt | 蓝图 | |
物理 | Raycast | Line Trace、Shape Trace |
Rigidbody | 碰撞、物理 | |
运行时平台 | iOS Player、Web Player | 支持的平台 |
项目和文件
和Unity项目一样,虚幻项目也保存在专门的目录结构中,并且有自己的项目文件,扩展名为 .uprojectfile 。你可以 双击 .uproject 文件,将游戏加载到虚幻编辑器中,或 右键点击 查看更多选项。
项目目录包含不同子目录,保存了游戏的资产内容和源代码,以及各种配置文件和二进制文件。其中最重要的就是 Content 文件夹和 Config 文件夹,前者保存项目的所有资产,后者保存项目的配置(.ini)文件。
我的资产应该放在哪里?
在虚幻引擎中,每个项目都有一个 Content 文件夹。这类似于Unity项目的 Assets 文件夹,是你保存游戏资产的地方。
如果你的虚幻引擎项目包含C++类,它们将位于项目在磁盘上的 Source 文件夹。
支持哪些文件格式?
虚幻引擎5支持一些最常见的文件类型:
资产类型 | 支持的格式 |
---|---|
3D | .fbx、.obj |
纹理 | .png、.jpeg、.bmp、.tga、.dds、.exr、.psd、.hdr |
声音 | .wav |
字体 | .ttf、.otf |
视频 | .mov、.mp4、.wmv |
场景文件?
在Unity中,你将GameObject放在场景中,然后将其保存为Scene场景资产文件。 虚幻引擎使用 Map地图文件(Map file) ,它类似于Unity中的场景。 Map文件保存了 关卡 的数据、关卡中对象、光照数据和某些关卡特定的设置信息。
项目设置?
从虚幻编辑器的主菜单,转至 编辑(Edit)> 项目设置(Project Settings) 。
Unity还有叫做"玩家设置(Player Settings)"的部分。在虚幻引擎中,我们叫 平台设置(Platform Settings) ,你可以在 项目设置(Project Settings) 窗口的 平台(Platforms) 分段下配置。
源文件在哪里?
在Unity中,你将C#源文件放在 Assets 文件夹中。在虚幻引擎中,你的源文件放在不同的位置,具体取决于你创建的虚幻项目的类型:
C++项目 在虚幻项目目录中有一个 Source 文件夹。Source 文件夹包含各种文件,包括C++源文件(.cpp)和头文件(.h),以及一些编译用的脚本(Build.cs、Target.cs)。
蓝图项目 没有 Source 文件夹。蓝图可以放在虚幻项目的 Content 文件夹中的任意位置。
如果你想将C++代码添加到蓝图项目,请从虚幻编辑器的主菜单转至 工具(Tools)> 新C++类(New C++ Class) 。
在 内容浏览器(Content Browser) 中双击C++源文件,可以在Visual Studio(Windows)或Xcode(macOS)中打开。
从GameObject到Actor
GameObject在哪里?
在Unity中,GameObject是可以放在世界中的"东西"。虚幻引擎中对应的概念是 Actor 。在虚幻编辑器中,你可以从 主工具栏(Main Toolbar) 中的 创建(Create) 菜单将新的空Actor拖入视口中,如下所示:
你虽然可以通过空Actor来制作游戏,但虚幻引擎还提供了各类特殊的Actor,并预置了它们的特性,例如 Pawn(用于可以由玩家或AI控制的Actor),或 角色(用于需要复杂移动和交互的可控制玩家角色)。就像空Actor那样,你可以将这些特殊类型的Actor放入视口中,然后添加或自定义其属性和组件。
虚幻引擎中的Actor与Unity中的GameObject稍有不同。在Unity中,GameObject是C#类,不能直接扩展。在虚幻引擎中,Actor是C++类,可以使用继承来扩展和自定义。下文会详细介绍继承的概念。
组件在哪里?
在Unity中,你使用组件向GameObject添加功能。在虚幻引擎中,你将组件添加到Actor。你在关卡中放入空Actor之后,将其选中,然后点击 细节(Details) 面板中的 添加组件(Add Component) 按钮,然后选择要添加的组件。
在下面的视频中,我们会创建一把火炬,首先放入一个空Actor,然后添加一个网格体组件作为基座,接着添加光源和粒子系统来创建火焰。
在Unity中,GameObject以列表形式保存组件。在虚幻引擎中,Actor以 层级(Hierarchy) 形式保存组件,而且组件之间相互绑定。你可以在以上示例中看到,光源和粒子与静态网格体相互绑定。这会带来一些重要的影响,本页面的 复合对象 小节会进行说明。
从Unity的Prefab到虚幻引擎的蓝图类
在Unity中,你使用组件构建一组GameObject,然后从中创建预制件(prefab)。接着,你可以在世界中放入预制件的实例,或在运行时将其实例化。
虚幻引擎有相同类型的工作流程,但其基于蓝图类:
一.使用组件构建Actor。
1.在Actor的 细节(Details) 面板中,点击 蓝图(Blueprint)> 添加脚本(Add Script) ,向其添加蓝图。
2.选择一个位置保存你的新蓝图类。
3.点击 创建蓝图(Create Blueprint)就可以了!
你可以从 内容浏览器(Content Browser) 访问新蓝图类。双击 可直接编辑,或将其拖入打开的关卡以放入游戏世界中。
Unity中的Script组件和MonoBehaviour去哪里了?
在Unity中,你通过将脚本组件放在GameObject上来添加C#脚本。你通过创建从MonoBehaviour继承的类来定义该组件的功能。
虚幻引擎的工作方式相同:你可以使用蓝图或C++创建全新的组件类,并将其添加到任意Actor。类似于将蓝图添加到Actor,你可以通过以下两种方式之一将组件添加到Actor:
1.从Actor的 细节(Details) 面板。
2.从 编辑Actor(Edit Actor) 窗口。
将新组件添加到Actor的步骤如下:
1.从Actor的 细节(Details) 面板或 编辑Actor(Edit Actor) 窗口,点击 添加组件(Add Component) 。
2.选择要添加到Actor的组件。你可以创建新组件,或从预定义组件列表中选择,例如光源、音频、粒子系统,等等。
在Unity中,创建新的MonoBehaviour时,你会收到一个骨架类文件,其中包含 Start() 函数和 Update() 函数。
在虚幻引擎中,新组件有类似的函数:
1.InitializeComponent(),其作用与Unity的 Start()` 函数相同。
2.TickComponent(),其作用与Unity的 Update()` 函数相同。
在蓝图组件中,这些函数显示为可视化节点。
可编写脚本的Actor蓝图类
你的新Actor蓝图类会有自己的蓝图可视化脚本。这样一来,你就可以将逻辑添加到整个对象,而不仅仅是单个组件。结合继承结构关系(稍后下文会解释),这会为你在设计游戏时提供很多灵活性。
除了支持可视化脚本的蓝图类之外,虚幻引擎还支持使用代码来实现C++类。下面并排比较了Unity和虚幻引擎代码,还给出了具有相同作用的虚幻引擎蓝图。
变换组件Transform
在Unity中,每个GameObject都有一个Transform组件,用于指定该GameObject在世界中的位置、旋转和比例。
虚幻引擎也一样,Actor有 根组件(Root Component),可以作为场景组件的任意子类。场景组件(Scene Component) 指定了Actor在世界中的位置、旋转和比例,这些属性也应用于以该场景组件为父节点的所有组件。很多有用的组件都是场景组件的子类,因此让它们具有位置信息是非常有用的!
即使你放置一个空Actor,虚幻引擎也会为该Actor创建默认场景根(Default Scene Root),这是一个最简单的场景组件。如果你放入新的场景组件,它将替换默认场景根。
复合对象
在Unity中,你可以通过构建GameObject层级以及绑定它们的变换组件来创建复合对象。
在虚幻引擎中,你可以通过让组件按照层级关系相互嵌套,来创建复合游戏对象。
如图所示,你可以让场景组件互相附加来得到一个相互嵌套的层级关系,因为它们有变换,这类似于Unity中的变换绑定。Actor组件(所有组件的基类)只能直接绑定到Actor本身。