从Unity到UE4的快速上手与迁移.docx
- 文档编号:12653494
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:24
- 大小:32.80KB
从Unity到UE4的快速上手与迁移.docx
《从Unity到UE4的快速上手与迁移.docx》由会员分享,可在线阅读,更多相关《从Unity到UE4的快速上手与迁移.docx(24页珍藏版)》请在冰豆网上搜索。
从Unity到UE4的快速上手与迁移
本页面的内容:
编辑器快速词汇查找表项目文件和文件从GameObjects到Actors如何在虚幻4中编写代码在虚幻4中编写游戏逻辑代码常见问题然后呢?
本指南从一个Unity的用户视角来整体看待虚幻4,并帮助将Unity的开发经验应用到虚幻4的世界中。
编辑器下面是Unity编辑器和虚幻编辑器的图片,用颜色标识了同类的区块。
每个区块也添加了标签,对应于虚幻术语表。
虚幻编辑器完全可以通过对各个区块的拖拽做到窗口布局的自定义。
编辑资源素材在Unity中,Inspector分页时用来编辑当前项目中选中的素材。
在虚幻4中,细节面板则用来展示并修改当前选中物体的属性,然后大量的编辑修改则需要专用的窗口或分页。
编辑每种类型的资源时都会打开分页窗口,类似于网页浏览器。
当然这些分页窗口也可以任意拖拽,并悬浮在其他窗口之上作为独立窗口显示。
快速词汇查找表下表左侧包含了常见的Unity术
语,右侧是对应的(或差不多的)虚幻4术语。
虚幻4的关键词直接链接到更进一步的虚幻在线文档中。
分类Unity虚幻4游戏内容类型Component组件GameObjectActor,PawnPrefab蓝图类编辑器界面HierarchyPanel世界大纲Inspector细节面板ProjectBrowser内容浏览器SceneView视
口网格物体Mesh静态网格物体SkinnedMesh骨骼网格物体材质Shader材质,材质编辑器Material材质实例特效ParticleEffect特效,粒子,级联Shuriken级联游戏界面UIUMG(虚幻示意图行UnrealMotionGraphics)动画Animation骨骼动画系统MecanimPersona,动画蓝图2DSpriteEditorPaper2D编程C#C++Script蓝图物理RaycastLineTrace,ShapeTraceRigidBody碰撞,物理运行平台iOSPlayer,WebPlayer支持的平台项目文件和文件那么目录和文件时怎么回事和Unity的项目一样,虚幻的项目也存在于自有的目录,并有自己的项目文件。
可以通过双击一个.uproject文件打开虚幻编辑器并加载该项目,或者右键来查看更多选项。
项目目录中包含不同的子目录,保存了游戏的资源内容和源代码,以及各种配置文件和二进制文件。
最重要的就是Content子目录和Source子目录。
我的资源素材应该放在哪里?
在虚幻4中,每个项目都有一个Content文件夹。
类似于Unity项目的Asset目录,这里就是游戏资源素材保存的地方。
要向游戏中导入素材的话,只需要将素材文件拷贝到Content目录,它们便会自动导入并出现在内容浏览器中。
当使用外部程序修改这些资源时,编辑器中的资源也会自动的被更新。
支持哪些通用资源文件格式?
Unity支持很多文件格式。
虚幻4也支持最通用的文件格式,如下表:
资源类型支持的格式3D.fbx,.obj贴
图.png,.jpeg,.bmp,.tga,.dds,.exr,.psd,.hdr声音.wav字体.ttf,.otf视频.mov,.mp4,.wmv场景是如何保存的?
在Unity中,GameObjects被放置在场景中,并保存为一个场景资源文件。
虚幻有一个地图文件,对应于Unity场景。
地图文件保存了关卡的数据以及其中的物件,以及光照数据和某些关卡特定的设置。
如果修改项目的设置?
所有的项目设置都可以在主菜单的Edit/ProjectSettings中找到。
类似于Unity的设置,能够对项目设定所需要的信息(比如项目的名称和图标),配置游戏输入的绑定,并定义运行项目时引擎的行为。
可以在这里了解更多单独项目的设置。
Unity还有被称为“玩家设置”的部分,在虚幻中,我们叫“平台设置”,并且可以在项目设置的“平台”分类里找到。
源文件在哪里?
在Unity中,人们习惯于将C#的源文件放在资源目录中。
虚幻4工作机制有点不同。
对那些拥有C++代码的项目,可以在项目目录中找到一个Source的子目录包含多种文件,包括C++源文件(.cpp)和头文件(.h),
以及编译链接的脚本(.Build.cs,.Target.cs)。
然后,只有蓝图的项目则不会有Source目录。
在虚幻4中开始使用C++最方便的做法是用编辑器的菜单项来AddCodeToProject(在主菜单的文件菜单中),或应用某个模板来新建一个C++的项目。
可以直接在内容浏览器中直接看到C++类,并通过双击它们便能直接在VisualStudio或Xcode中
打开该文件。
从GameObjects到ActorsGameObject去哪里了?
在Unity中,一个GameObject是可以被放置在世界中的一个“东西”。
在虚幻4中对应的是一个Actor。
在虚幻编辑器中,可以从物体面板中直接拖一个空的Actor放置到场景中:
Youtube视频虽然可以通过搭建并扩展空的Actor来制作游戏,但虚幻4提供了各种特殊类型的Actor并预制了它们的特性,比如Pawn(用于作为玩家或者AI的角
色),或者Character(用于会做动作的生物)。
和空的Actor一样,可以直接将它们拖拽至场景中,并给它们添加组件,或自定义属性。
之后可以学习到更多相关内容,这里只需要了解虚幻4有个(Gameplay框架)[(Gameplay/Framework)]来协同各种特殊的Actor一起工作。
虚幻4中的Actor还是和Unity中的GameObjects有不同之处。
在Unity中,GameObject是C#的类并且无法直接扩展。
在虚幻4中,Actor是C++类,可以很容易的被继承或扩展来自定义。
我们之后将会谈论更多!
组件在哪里?
在Unity中,可以通过为一个GameObject添加组件来达到给予一定的功能。
在虚幻4中,也可以为Actor添加组件。
在向关卡中放置了一个空的Actor后,点击添加组件按钮(在细节面板中),并选择一个组件来添加。
这里我们通过放置一个空的Actor来创建一个火炬,并为它添加一个网格物体组件作为基座,以及一个光源和粒子系统作为它的火焰。
Youtube视频在
Unity中,一个GameObject保存了组件的简单列表,但在虚幻4中,一个Actor保存了属于它的组件以及它们的继承结构关系。
可以在上面的例子中看到,光源和粒子是连接到网格模型的。
之后在复合Actor和复合GameObject中会有重要的描述讨论。
从Unity的prefabs到虚幻4的蓝图类Unity的工作流程是基于prefabs的。
在Unity中,创建一系列GameObjects以及它们的组件,并为它们创建prefab。
然后便可以在世界中放置prefab的实例,或者在运
行时创建它们。
虚幻4则是基于蓝图类来协同工作。
在虚幻4中,创建一个Actor以及它的组件,选择它并点击蓝图/添加脚本按钮(在细节面板中)。
然后选择保存蓝图类的地方,并点击创建蓝图来保存新建的蓝图!
Youtube视频新建的蓝图类可以在内容浏览器中找到。
可以直接双击打开编辑它们,也可以将它们拖拽到任意场景关卡中。
脚本组件和MonoBehaviour在哪里?
在Unity中,GameObject有脚本组件,并可以添加C#脚本。
可以创建MonoBehavior子类并定义那个组件做什么。
虚幻4也有类似的内容。
可以自由创建全新的组件类并将它应用于任意Actor。
组件类可以使用蓝图脚本创建,也可以用C++创建。
那么在虚幻4中如何创建自己的组件类呢?
在细节面板中,添加组件(AddComponent)的下拉框中,可以看到创建新组件,或者选择已经存在的组件:
在Unity中,当创建新的MonoBahaviour时,将会有一个框架类文件,并有Start()函数和Update()函数。
在虚幻4中,也会有一个框架类,有一个InitializeComponent()函数和一个TickComponent()函数,它们和Start、Update具有类似的行为。
如果创建一个蓝图脚本组件,则会有可视化节点来表示类似的函数:
可编辑脚本Actor蓝图类这是个很酷的虚幻4功能:
新建的Actor蓝图类可以拥有自己的可视化蓝图脚本编辑!
这样能够为整个物体添加逻辑,而不仅仅是每个组件。
结合继承结构关系(稍后下文解释),这将会提供游戏制作很多灵活性。
InadditiontoBlueprintClassessupportingvisualscripting,UE4alsosupportsC++Classesimplementedwithcode.Hereareboth,side-by-side.除了蓝图支持可视化脚本编辑,虚幻4还支持通过代码C++类来实现。
这里是双方的一个对照:
UnityC#虚幻4C++usingUnityEngine;usingSystem.Collections;
publicclassMyComponent:
MonoBehaviour
{
intCount;
//Usethisforinitialization.
voidStart()
Count=0;
}
//Updateiscalledonceperframe.voidUpdate()
{
Count=Count+1;Debug.Log(Count);
}
}
#pragmaonce
#include"GameFramework/Actor.h"
#include"MyActor.generated.h"
UCLASS()
classAMyActor:
publicAActor
{
GENERATED_BODY()
intCount;
//Setsdefaultvaluesforthisactor'sproperties.
AMyActor()
{
//AllowsTick()tobecalled
PrimaryActorTick.bCanEverTick=true;
}
//Calledwhenthegamestartsorwhenspawned.voidBeginPlay()
{
Super:
:
BeginPlay();
Count=0;
}
//Calledeveryframe.
voidTick(floatDeltaSeconds)
{
Super:
:
Tick(DeltaSeconds);
Count=Count+1;
GLog->Log(FString:
:
FromInt(Count));
};
虚幻4蓝图虚幻4蓝图类的扩展性Unity的prefabs和虚幻4的蓝图类在游戏中类似的实例化。
然后Unity在prefabs之间的关系上有并发的问题,这限制了创作的扩展性。
在虚幻4中,可以通过扩展已有的蓝图类来创建新的蓝图类,并定义新的属性,组件功能及可视化脚本功能。
比如,在虚幻4中,可以创建一个蓝图类叫做Monster,实现
基本的怪物功能,比如追击人类。
然后可以创建一个叫做Dragon的蓝图类来扩展它(某种特定的怪物,添加了火焰吐息的功能),再有一个Grue(一种当它变黑是就有可能吃人的怪物),以及其他8种类型。
这样一些Monster的子类都继承了基础的Monster类的功能,并在此基础上添加新的能力。
在Unity中,则需要创建很多不同的GameObject的prefabs:
为Dragon创建一个,为Grue创建一个,等等。
假设这时希望为所有的怪物添加某个功能,比如使用一个Speak组件来说话,在Unity中则需要更新所有的10个prefabs,拷贝粘贴到每个中。
在虚幻4中,只需简单的修改Monster的蓝图类,并为它添加新的Speak的能力,便做完了!
Dragon,Grue以及其他8种Monster的子类都会自动的继承这个说话的新功能,并不需要去修改这些子类。
但还有更多!
我们关于蓝图类所说的一切,都同样适用于C++的类,也同样对Actors和组件适用。
我们的体系设计时考虑支持各种不同程度的开发形式,具有功能上的可扩展性,
可以为10个开发人员的项目服务,也可以为100个人的项目人员服务。
那么应该用蓝图脚本还是C++代码呢?
或者同时使用?
可视化蓝图脚本是对游戏实时逻辑和序列型的事件的理想制作手段。
这个系统对策划、美术以及面向可视化编程的程序员是非常好用的,它能够可视化的管理游戏内的物体,并且容易访问。
完全可以通过蓝图就完成一个游戏的制作。
请参考TappyChicken示例,它是一个完整的范例。
C++编程可以为更大体量的任务工作,比如构建一个游
戏体系,制作复杂的AI行为,或者新增引擎功能。
对于已有C++技能的开发人员而言,可以翻阅一下在虚幻4中的C++编程简述页面。
大部分的项目都将是混合使用蓝图和C++。
很多开发者使用蓝图来创作游戏原型,因为这个过
程容易且有趣,但会在之后的性能调整和更严格的引擎使用时将部分蓝图或全部蓝图脚本转移至C++O蓝图类也能扩展
C++类虚幻4的游戏开发中很多令人着迷的过程来存在于程序员用C++实现新的功能,而策划和美术在蓝图中使用这些功能,并提出更多要求!
下图是针对一个虚幻4的射击游戏项目中实现拾取物品过程时,团队的一种形式,混合了C++类的编程实现,以及蓝图类用于处理行为和表现。
转换组件在Unity中,每个GameObject都有一个转换组件(TransformComponent),赋予该GameObject在世界中的位置、角度以及缩放比例。
在虚幻4中类似,Actor有一个RootComponent,能够作为场景组件的任意子类,场景组件赋予Actor在世界中的位置、角度及缩放比例,这些参数会费赋予该Actor的组件关系结构中在它之下的所有组件。
很多有用的组件都是场景组件的子类,因此让它们具有位置信息是非常有用的!
即便只放置一个空的Actor,虚幻4也会为它创建一个“默认场景Root组件”,这是一个最简单的场景组件。
当放置一个新的场景组件时,默认场景Root则会被替换掉。
复合物体在Unity中,可以构建GameObject之间的关系并将他们的转换组件绑定,来创建复合物体。
在虚幻4中,通过整洁的组件继承便能创建复合游戏物体。
从上图可以看到,一个整洁的继承关系可以通过将场景组件互相附加来得到,由于他们有转换功能,类似于Unity中的转换的绑定。
Actor的各个组件(所有组件的基类)只能直接依附到Actor自己身上。
我是否应该用组件来创造其他一切?
其实这完全取决于你自己,大部分情况下应该结合Actor的类和自定义组件。
我们先前已经提到过,虚幻4中已经提供了一些特殊类型的Actor用于某种能力并总是附带某些组件。
比如一个Character总是会包含一个CharacterMovement组件。
有一些在引擎中常见的Actor类型,并且大部分种类的游戏都会用到它们。
这里是我们已经制作的最常见类型Actor的列表:
Pawn-Actor的一种类型,用于表现一个可供控制的游戏物体,比如是玩家的角色。
Pawn通
常都是被玩家或者AI通过Controller控制并移动。
Character-一种特殊类型的Pawn,用于双足类型的角色,
并具备一些复杂的功能。
Controller-依附并控制一个Pawn。
通过将Pawn和Controller的分离,我们可以编写AIController,用于控制Pawn,并且和玩家控制Pawn采用相同的接口。
PlayerController-一个更为特殊的Controller,用于从玩家的手柄中获得输入信息,或者鼠标键盘中获得殊瑞星纳西,并将这些信息驱动它所控制的Pawn或者Character的行为。
那么所有的东西都是Actor咯?
并不是所有的。
Actor是虚幻4中最常见的用于游戏的类,并是唯一能够在世界中被创建生成Spawn的类。
因此任何被放置在关卡中的东西都将是一个Actor。
另外一个需要知道的
重要类型是Object。
Object实际上是所有虚幻引擎的类的基类,包括Actor以及一些其他的类。
这是一个比Actor更加底层的类,具备一些作为虚幻引擎类的可预料的功能,比如反射和序列化。
Object是一个非常基础的类,当我们需要定义一个新的类但又并非Actor的时候会使用它。
比如ActorComponent是所有组件的基类,而它则是继承Object而非Actor。
在虚幻4中Gameplay框架是什么东西?
好吧,这里开始事情变得一点点疯狂(酷炫的方向)。
Unity提供了一个干净的石板用于设计游戏,虚幻也做了同样的事情。
在Unity中可以基于GameObjects和组件来创建所有的东西,而在虚幻中则是基于Actor和组件来创建。
然后,虚幻在顶层提供了叫做Gameplay框架的部分,而Unity中并没有这块内容。
虽然做一款游戏并不是一定要用到它,但如果用的话会非常酷!
基本上来说,它提供了一些基础功能,如果遵循它的逻辑,您将能够很容易的获得一些很赞的功能,否则可能花费很多时间,并且实现也很困难,或者很难改造。
(比如完整的多人游戏支持!
)已有大量的酷炫游戏基于虚幻的Gameplay框架之上制作,花点时间来了解该框架的机制是很值得的。
没错,最终您将具有您自己的框架形式,如果想要这么做当然完全没问题!
但虚幻4当前已有数以百计的炫酷开发者在使用它,因此我们花点时间来了解一下。
要使用Gameplay框架,只需要了解一些预制的Actor类,比如Pawn,Character,和PlayerController,并逐步了解虚幻的网络复制和网络其他功能。
现在我们先回到最基本的部分。
如何在虚幻4中编写代码我曾习惯于在MonoDevelop中写代码对于蓝图脚本,只需要虚幻编辑器——所有的东西都已经包括了!
要编写C++代码,在Windows平台下载VisualStudio的免费版本,如果是Mac的话则需要安装Xcode。
当第一次创建一个新项目(或者为已有项目添加代码)时,虚幻4将会自动的创建VisualStudio的项目文件。
您只需要在内容浏览器中双击一个C++的类便能在VisualStudio中打开它,或者在主菜单的
文件菜单中点击OpenVisualStudio。
在虚幻4中有个重要的不同:
有时必须要手动的更新VisualStudio的项目文件(比如,下载了UE4的新版本,或者对源代码文件的磁盘存放位置做了人为改变)。
可以通过在主菜单中点击RefreshVisualStudioProject或者在项目目录中右键点击.uproject文件并选择GenerateVisualStudioprojectfiles便可。
编写事件函数(Start,Update等)如果您曾用MonoBehaviors工作,那一定熟悉诸如Start,Update和OnDestroy等方法。
以下是对Unity的行为和对应的虚幻4的Actor和组件的比较。
在Unity中,我们可能有一个简单的组件,类似下面的代码:
publicclassMyComponent:
MonoBehaviour{
voidStart(){}
voidOnDestroy(){}
voidUpdate(){}
}
请记住,在虚幻4中,您可以直接为Actor写代码而无需创建新的组件来添加代码。
这其实是很常见并有意义的。
类似于Unity的Start,OnDestroy和Update函数,虚幻4在Actor中有类似的方法:
C++:
UCLASS()classAMyActor:
publicAActor
{
GENERATED_BODY()
//Calledatstartofgame.
voidBeginPlay();
//Calledwhendestroyed.
voidEndPlay(constEEndPlayReason:
:
Type
EndPlayReason);
//Calledeveryframetoupdatethisactor.
voidTick(floatDeltaSeconds);
};
蓝图:
在虚幻4中,组件具有不同的函数。
以下是示例:
C++:
UCLASS()
classUMyComponent:
publicUActorComponent
{
GENERATED_BODY()
//CalledaftertheowningActorwascreated
voidInitializeComponent();
//CalledwhenthecomponentortheowningActorisbeingdestroyedvoidUninitializeComponent();
//ComponentversionofTick
voidTickComponent(floatDeltaTime,enumELevelTickTickType,FActorComponentTickFunction*ThisTickFunction);};
蓝图:
请记住,在虚幻4中调用基类的方法很重要。
比如,在UnityC#中可能是调用base.Update(),但在虚幻4的
C++中我们使用Super:
:
TickComponent():
void
UMyComponent:
:
TickComponent(floatDeltaTime,enumELevelTickTickType,FActorComponentTickFunction*
ThisTic
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Unity UE4 快速 上手 迁移