Lost Gate

这个世界实在太无趣了… 既然如此,那就再创造一个世界如何?

断断续续自学UE4差不多有一年时间了,最近总算把一个游戏的核心玩法的DEMO制作完毕,算是告一段落。 老规矩,先上一下结业成果:

* 请修改画质,推荐使用1080P + 60FPS 观看

下面开始正文:

首先,本文假设各位看客都具备其他主流平台的开发经验(如Unity)和任意主流编程语言的基本功。如果您是纯净水新手,那么本文不一定适合你。

STEP。1 UE4总览

先下载UE4,安装,随便熟悉下界面之类的。

随后打开官网DOC:https://docs.unrealengine.com/4.27/zh-CN/WhatsNew/

目前UE4的资料相对于Unity来说,非常的少,官网是最佳的学习入口。很多所谓教材也是搬了一些官网的资料做的。

文档包含海量的内容,在此不建议每个都看。UE4具有超多的组件,其中很多是属于为了解决特定问题而存在的(如子系统、布料、地形之类的),对于新人来说,上来就接触过多的概念,可能会导致一种焦虑:为什么UE4这么复杂,我该怎么下手?

对此,我的惯用学习思路是做减法,只关注自己需要的内容。

例如,对于客户端程序来说,重点阅读:编程和脚本编写,创建交互体验 这两个章节即可,其他内容可以粗略看看。 不需要咬文嚼字,也不需要跟着动手做范例。只要了解概念了就可以(推荐阅读时长:4~8小时)。
其中UE还为Unity的用户准备了一个知识迁移指南,方便各位跳槽

https://docs.unrealengine.com/4.27/zh-CN/Basics/UnrealEngineForUnityDevs/

STEP。2 学习蓝图,并制作一个DEMO

当阅读后,脑海里应该有了一些概念。 接下来就该动手了。

UE4具有蓝图和C++两种编程方式。 假如你的目标和我一样,是为了做商业大型游戏,那么就趁早放弃以蓝图为主,或者纯蓝图项目的打算。

原因是: 1.蓝图不方便做团队协作,SVN、GIT兼容性不好,Merge困难。 如果为了热更新,那么Lua显然更好。 2. 表达效率低,尤其是数学计算相关的环节,代码几行就可以实现的效果,蓝图需要铺开一大摊子。 3. 无法操作内存,指针,更不用说ECS之类的架构。对于大型项目,构建底层框架非常困难。 4. 性能相当于C++较低,即便是编译里选了转化C++,也要明显的低。请注意,在大型项目中,核心玩法哪怕是性能提高10%,也是一个巨大的进步,而蓝图天生就拉下了一大截。

但是完全不用蓝图也不现实, 在UMG(UI组件)和动画蓝图等等环节,依然需要用到,所以C++为主,辅以蓝图,是我最推荐的。

所以,接下来我推荐先了解蓝图。跟着教程,做一个蓝图小DEMO。

先仔细阅读官网的蓝图章节,如果有编程基础的话,估计1,2个小时就可以上手。

https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/Blueprints/

随后,跟着官网的这个DEMO,动手实现

https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/Blueprints/QuickStart/

当然也可以到B站随意搜一个热门的蓝图项目范例,跟着做。(不出意外的话,应该大部分都是打手枪的游戏,嗯,没错,UE就是FPS游戏改造而来的引擎)

在完成demo后,对于UE应该有了一个基础的认知。 此时可以适当了解一下常见组件:混合空间,蒙太奇,粒子系统,材质等等。 在官网文档中,搜索相关关键字即可。

STEP。3 学习使用C++构建游戏

对C++不熟的,先补习C++。这里推荐一个网站,简洁无水分:

https://www.runoob.com/cplusplus/cpp-tutorial.html

如果有C#等其他语言的基础,预计3~7天即可完成学习(或复习)

为了巩固,建议用C++做一个DEMO实际演练。我个人是写了一个控制台的BadApple字符动画。

完成C++学习后,打开官网这个教程,使用C++完成一个FPS的demo:

https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/CPPTutorials/FirstPersonShooter/

完成后,就算是入门了。在进行下一个阶段以前,建议继续巩固知识,自行尝试给FPS DEMO加入新的功能(如,修改为TPS越肩视角,加入敌人,AI,拾取物,胜负判定等)。

STEP。4 正经的制作游戏

按照我的经验,差不多需要2~3个月的业余时间,就可以到达这个步骤。

此时,依照自己的喜好或者理想,选择一个自己特别熟悉的游戏,进行模仿。

(如果此游戏在网上有逆向的资源可供使用,那就更好了。在不商业使用的情况下,是没关系的。当然,也可以去虚幻商店获取素材)

不建议自行设计游戏DEMO,或者模仿自己不熟悉的游戏。 这会浪费大量时间去了解目标游戏的细节,还会导致DEMO最终品质不佳。

选择好以后,开始构建框架和工具流。

工欲善其事必先利其器。建议先编写底层模块,如 定时器,事件管理器,网络封装,渲染封装,物件池等。 这样可以巩固C++,并了解到UE特有的魔改C++环境,例如各类UBT标记,反射,GC规则,委托。 遇到诡异的设计,不要着急,这是UE C++,不是原生C++,很可能就是“设计如此”,你只需要欣然接受就可以。

底层搭建完毕,就是编写游戏逻辑的部分了。此时,因为项目不同,以及所遇到的问题的不同,就看各位自行发挥了。

—————— Extra ——————

Unity与UE的一些对应关系

Unity的常用组件在UE都可以找到对应关系,如Actor与GameObject类似,只是Actor不自带transfrom。

UE的距离单位= Unity * 100

Unity一般通过挂载一个MonoBehavior来展开逻辑。UE这边,也可以拖一个Actor展开,但建议使用GameMode。

Unity和UE都支持按键和轴映射,但是一个冷知识是:使用按键绑定互斥轴时,对轴状态切换处理不同,当两轴之间迅速来回切换的话,Unity必然会有至少一帧的轴值为0的状态,而UE不一定会有。切换时,插入0轴值,可以让按键的切换逻辑顺序比较可靠, A按下B弹起> A弹起B弹起 > A弹起B按下 (目前仅发现对使用按键输入且格斗游戏的序列指令判定有影响,其他游戏应该无影响)

Unity人形移动一般使用CharacterController, 而UE使用Character+ CharacterMoveComponent 。

推荐拓展阅读:

《inside UE4》,了解UE4的一些工作原理和底层。当然你自己阅读源码也可以
https://zhuanlan.zhihu.com/p/22813908

如何搜索UE4的资料:

建议放弃百度,使用谷歌以及UE社区的问答中心去搜索

https://answers.unrealengine.com/index.html

关于动作游戏的制作思路:

这是一个展开后可以说得很复杂的方向, 在此先推荐一篇文章,可以参考其中的思想:

https://blog.uwa4d.com/archives/USparkle_ACT.html

未完待续。


Email
57085445@qq.com

讨论群
LostGate同人游戏 184379459
魔力宝贝官方手游群 540221885