InsideLyra - 致UE“初学者”

InsideLyra - 致UE“初学者”

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!


Lyra项目,被誉为UE5的官方教学示例,实际上却远超初学者的难度。官方定义为初学者游戏,但真正掌握它,却需要较深的技术背景和至少200小时的UE开发经验。

视频地址:
【Inside Lyra】之我要学UE

引言

Lyra项目,是伴随着UE5一起发布的官方教学的示例项目,全称是Lyra Starter Game。官方定义为初学者游戏。

但学过的人都知道,这个示例项目远远超出了初学者的难度。简单来说,如果自学Lyra的话,你至少需要掌握以下条件:

1.熟练掌握UE特化C++编程。这就表示,你需要在熟练掌握普通C++的基础上,额外掌握Unreal为C++做的特性化封装,比如:以UHT(Unreal Header Tool)为代表的反射系统,以UObject为代表的UE对象系统,以TSharedPtr等为代表的智能指针和垃圾回收系统。

2.熟练掌握UE编辑器与核心框架。这表示,你需要能够熟练使用UE的编辑器,至少能知道绝大多数功能的入口,以及常用功能的位置和使用方法。在展示某个窗口的时候,你应该知道它是如何打开的,以及它包含哪些操作和信息。掌握核心框架则代表,你了解UE的模块化构建和依赖规则,了解事件委托机制和用法,了解UE的资产序列化与引用,了解常用的UE容器,以及核心的Gameplay框架等等。

除此之外,还希望你拥有至少2年的编程经验,或者至少1年左右的游戏开发经验。这表示,你应该能秒懂某些约定俗成的知识点,比如单例和工厂,广播和分发,会话和鉴权,缓存与热修等等。

低于上面这个门槛的同学,自学Lyra就如同在啃天书一样。并且从经验上来说,200小时的UE开发经验是达到高效学习Lyra的临界值,低于此时长的开发者自学Lyra的放弃率高达 90%。

但可以这么说,如果你能基本看懂并理解Lyra的所有代码,那么月薪2W是简简单单的。如果你能熟练掌握和使用所有的Lyra代码,做个主程也是随随便便的。

本文就是帮大家剖析一下Lyra这个项目,减少自学的挫败感,希望能够尽快掌握这个“工业级”入门游戏,提高自己的游戏开发水平。所以,我将这个系列定义为Inside Lyra。

在开始之前,再次强调一下,本文不是0基础,不会讲解诸如编辑器有几个面板,蓝图有几种类型,用TArray等容器写一个用于排序的Lamba表达式之类的基础知识。而是,尽量为大家深入浅出的去剖析,整个Lyra项目的运作流程,以及各个工业级框架和组件之间的协同关系等。

本文的目标是,能正常打开UE编辑器并运行Lyra就成功。

一、为什么是UE?

由于本文的目标非常简单,在开始之前我们还是先说明几个前置话题。

我拥有10多年Unity开发经验,过去也一直是在做Unity引擎相关的教程,那么这次为什么选择Unreal的项目做教程呢?从程序的角度来分析一下,主要有以下几点:

1. 引擎源码开放。
这一点对技术开发来说非常重要,非常非常重要。虽然引擎源码会大幅增加项目开发时的复杂度,从而导致学习和开发效率的锐减,但一旦你迈过这个门槛,从学习者变为熟练使用者之后,你才知道引擎源码对于开发者来说是多么提高效率的事情。你无需再盲猜每个功能背后的实现思路,你可以随意修改引擎源码完成特殊功能的适配,你可以随时断点来调试某个功能的调用顺序,你可以自己修复引擎版本自带的BUG,你甚至可以直接Copy引擎模块代码来实现一个比较接近的功能,等等。虽然我自己也能接触到其他引擎的源码,但绝大部分的开发同学是没有这个条件的。因此选择一个提供源码的引擎,对于开发者而言,会得到前所未有的控制力与安全感

2. 预置Gameplay框架。
从这一点上来说,我个人觉得是有利有弊的。如果大家接触过其他引擎就会知道,大部分引擎在开发项目的时候,是可以自由地定制项目的启动入口的,并且启动的流程也可以完全自定义。但是UE不是,它提供一套自己的Gameplay框架,开发者必须完全理解这套机制,并且在这个基础上穿插去做自己的定制流程。很难说这两种方式,谁更好。自由度高意味着,复用性低。而自由度低则意味着,可以举一反三。

也可以这么认为,当你理解了一个UE项目的启动流程之后,你就可以快速上手任何一个UE项目。但相比于可自由定制的项目来说,这增加了初学者的学习门槛,也是学习UE会卡关的主要问题。在其他引擎上,你花20个小时可能已经做出一个有点意思的小游戏了,而在UE上,20个小时可能连Gameplay框架还没学完。但总结来说: 用短期学习成本换取长期团队协作效率与项目可维护性的指数级提升,是非常有必要的,因为你不可能一直是一个人在战斗。

3. 强大完整的服务器。
UE采用的是服务器同构设计,同构设计代表的是服务器逻辑和客户端逻辑是同一套代码。也就是说服务器可以完全复用所有为该项目实现的框架和代码。以基于Actor级别的同步能力,和可靠的同步机制,让开发者完全不需要关心通信。使绝大多数的异常可锁定在游戏逻辑层,而无需反复排查底层同步机制,减少开发者在定位问题上的尝试,提高开发和调试效率。同时,也可以任意部署在本地或者直接用编辑器充当服务器来调试相关逻辑。但缺点也是有的,因为自己又当客户端,又当服务器,难免会在系统在开发的时候发生“精神分裂”,因为你要时刻切换自己的身份,思考某句代码是执行在权威服务器上,还是在本地客户端上。

4. 完整的无缝大世界方案。
无缝大世界,可以说是次世代开放世界游戏的标配了。在其他引擎中完成这个方案的代价非常高,而在UE中,只需在创建地图时,简单勾选几个选项,即可激活基础框架,配合Data Layers可快速实现昼夜/环境破坏等动态效果。这可以让开发者的精力从实现无缝大世界本身解放出来,全力投入内容创作与玩法设计上。

5. 影视级的动画系统。
内置Control Rig+Motion Matching等工业流水线,搭配IK/FK重定向的工具链,让中小团队也能产出3A级动画的丝滑表现。

6. 完善的编程规范和命名规范。
UE为所有代码和资产提供了一套命名规则,所有开发人员需要共同遵守,甚至部分规则如果不遵守还会强制报编译错误,因为代码可读性、可维护性是一个团队高效协作的利器

7. 蓝图。
是一把威力与风险并存的双刃剑。无需代码,策划/美术也能快速搭原型、配置数据,对UE新手友好。但从开发效率上和逻辑可读性上来说,远远落后于C++。当哪天你突然意识到蓝图实现某个功能很麻烦的时候,那么恭喜你,你现在是个程序员了。

8. 多线程安全。
在UE中,你可以通过Task Graph和AsyncTask提供高层抽象,在规范使用下大幅降低死锁/竞态风险。傻瓜式的封装,可以让你随意指定线程池(游戏/渲染/后台)来干活,完成后用委托(Delegate)再回调到Game线程去处理(非线程安全操作必须回主线程!)。

以上并不是全部的UE优势,UE最大的优势其实是他们每个版本都提供最前沿的技术,供开发者学习和了解,并且非常慷慨地给出所有资源和示例代码。甚至官网的文档都远远落后于代码的更新速度。

所以综合而言,选择UE,其实是选择一艘拥有核动力引擎的工业巨轮。启航虽慢(学习曲线陡),转向笨拙(框架约束),但其源码级的掌控力、成熟的Gameplay框架、高效的同构Server、革命性的大世界/动画方案、规范的代码环境、灵活的代码/蓝图模式、强悍的并发异步工具链等能力,让你在开发3A级巨制或大型多人游戏的惊涛骇浪中,拥有无与伦比的稳定性、生产力与技术上限。它逼你成长为“正规军”,过程虽让人头秃,但学成之日,你便是战场上的“王牌舰长”!

所以,就你了,Unreal,启动!

二、为什么是Lyra?

Lyra一直以来被当做UE官方的“初学者示例”,其实是存在认知错位的。它本质是Epic用来展示UE5工业级开发范式的技术演示,而非真正的零基础教程。它是一个完整的项目,包含各种顶级的框架设计和UE5最新的引擎特性。比如:

1.它有约15万行的代码和200+个蓝图,规模远超独立小游戏的标准。

2.多层抽象的基础框架,GameFeature+Experience+HotFix,再加客户端和服务器一体化的设计,复杂度非常高,需先熟练掌握插件系统/模块化设计

3.核心机制代码分散,学习难度高。被拆分为20+个独立的插件,对于能力复用和组合有较好的支持度。

4.使用数据驱动设计,一个简单的角色属性的修改,可能就要跨越数个配置文件。而非简单修改一个值。

一个典型的场景就是:

设计一个简单的复活队友的技能可能就要穿透至少5层:LyraHeroComponent → AbilitySystem → GameplayCue → 客户端预测 → 服务器RPC验证。

那么为什么Epic仍坚持推广Lyra呢?说些个人不负责任的猜想:

1. 技术展示。
强制开发者接触UE5前沿特性(如World Partition/MetaSounds, 等优秀能力)。

2. 生态绑定。
使用Lyra等于深度依赖Epic后端服务(如EOS好友,排名,成就等系统)。

3. 开发者筛选。
用高复杂度来过滤非目标用户(3A/多人游戏团队)。

  • 一个不负责任的数据显示,某个国外课程的后台数据表明,仅12%的UE自学者在Lyra项目上坚持超2周。

那么,最后回答一下,我们为什么要学习Lyra呢?我的答案是:

1.从技术提升角度来看,Lyra涵盖了UE5众多前沿且复杂的技术特性和架构设计。学习Lyra能够帮助开发者深入理解UE5的高级功能和工业级开发范式,掌握插件系统、模块化设计、数据驱动开发等关键技术,这些技术在大型游戏开发和复杂项目中具有极高的实用价值。例如,掌握了Lyra的架构设计思路,开发者在面对其他大型项目时,能够更高效地进行系统架构和模块划分。

2.从职业发展角度考虑,由于Lyra的学习难度较大,成功掌握它意味着开发者具备较强的技术学习能力和解决复杂问题的能力。正如前面调查数据所示,掌握Lyra的开发者在求职大公司和大型项目工作室时具有显著优势,能够获得更多的职业机会和更好的职业发展前景。

3.从行业趋势来看,随着游戏行业的发展,对游戏的品质和规模要求越来越高,UE5的工业级开发范式将逐渐成为行业主流。学习Lyra可以让开发者提前适应行业发展趋势,紧跟技术前沿,在未来的职业竞争中占据有利地位。

其实,大家也可从B站或者知乎上搜索Lyra相关的关键词,可以看到对一个子模块的讲解都可以作为一个技术大会的分享主题,也就证明了Lyra的含金量。再一个是,就目前来看,绝大部分UE5的项目,不管是什么类型的,都会或多或少参考Lyra的框架设计。比如,Lyra中完整实现了编辑器扩展,客户端和服务器交互和分离,构建多平台等能力,这些是无论做什么类型的游戏都有参考价值的。

三、教程形式

传统教程像在组装乐高说明书 —— 先逼你认遍所有“零件”,比如从UObject到Actor再到Component等,按照UE的复杂度来看,可能20小时后还在学基础概念。而那种技术大会分享更不用说,简直就是“量子速读现场” —— 满屏架构图咻咻乱飞,一张PPT涉及的知识点可能比他的头发还多。每章的知识点过的还非常快,来不及截图不说,截了也看不懂。

对于Lyra这种工业级的架构和业务来说,这两种就更不合适了,讲个GameState要先科普一个小时的UObject,这谁受得了呢?有可能你讲完Gameplay框架,UE都更新两个版本了。

而如果分模块击破也不靠谱,Lyra的核心代码分散在20多个核心的Plugin中,如果要按模块讲解,要就要把UE的插件-模块化的结构先讲清楚,再讲明白Lyra拆分插件的思路和优劣势,这也是耗时且性价比不高的事情。

所以真要按照传统线性的教学方式来的话,挫败感会很强,弃坑率也绝对会非常高。

而我这次的思路,会偏向于先上路再慢慢修正。也就是直接从Lyra运行的核心代码开始,按照顺序,代码执行到哪我们就拆解到哪。这样的好处就是,每一个介绍的代码你都知道它在当前运行时候是有用的。虽然坏处是会将知识点分散到多节课中,但每节课学到的就是项目当前在用的,知识点不浮空。

最后呢,本文还是以大家能看懂为主,在能看懂的基础上再去局部修改和替换小模块来验证自己的理解,以此为迭代才能真正的掌握。比如一个UI界面,当你看懂之后,可以先尝试修改上面的一个文字,然后添加或者修改一个自己导入的图片,或者直接加载一个自己写的UI等等。循序渐进地理解才能真正掌握。

四、环境准备

本次使用UE最新的版本,也就是5.6版本进行。请严格按照下面的步骤配置你的开发环境。

  • UE 5.6的下载和安装

1. 安装Epic Games启动器。
https://www.unrealengine.com/zh-CN/download

下载完成之后,像普通程序一样,双击安装。由于要额外下载内容,所以需要等待一会儿,也可以通过观看右边官方提供的安装视频进行安装。

UE引擎官方版本的安装只有这一个办法,当然当你有一定经验之后,可以到GitHub上下载引擎源码自己编译生成引擎也是可以的。

如果你有时间和话,也可以阅读官方提供的安装文档进行引擎安装:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/install-unreal-engine

如果你打开网页是英文的话,可以在这里切换语言:

启动器下载完成之后,需要登录才能正常使用。未登录状态下,运行启动器的界面是这样的,需要自行注册Epic账号进行登录,这一步就留给大家自行完成。

当你登录之后,看到的界面是这样的。

其中右边有三个页签,商城、库和虚幻引擎。前两个就跟Steam平台一样,展示的是作为游戏平台的内容,库则是你已经拥有的游戏。友情提示,Epic平台每周可以免费领取1~2款游戏,重大活动时候免费送大型游戏,可以保持关注。

然后我们要看的其实是第三个页签,也就是关于虚幻引擎的部分,点开页签后长这样。

这个页签下会发布很多UE引擎的动态和新闻。顶上的一排子标签的作用分别是:

  • News:热点资讯。
  • 示例:UE官方发布的各种技术演示工程,基本上都是完整可以运行的部分。
  • Fab:是EPIC多个资产商城的合集,可以下载大量的三方插件、代码和资产之类的。不过它需要在单独的页面打开才能看,启动器里只是一个跳转入口。你甚至可以在这里下载Unity的插件和资产。
  • 库:这个页签是引擎相关的管理页签。在这里可以下载新的引擎版本,和管理已经下载的引擎版本,比如我这里就已经下载好了5.6版本的引擎。

当你有已经安装好的引擎的时候,在右上角就会提示可以直接启动引擎,这是引擎启动的方式之一。当然如果安装了多个版本的话,右上角也可以切换版本。

如果没有引擎或者想要下载引擎,点击左边的“+”号,可以选择要下载的引擎版本。

选好引擎版本之后,点击安装就会弹出安装的一些选项,包括位置和选项。选项这里可以选择额外支持的部署平台,一般我们加上安卓和iOS就可以了。还有一个是调试符号,一般是用来调试引擎的,新手的话可以不管,这个要多增加几十G的空间。

都选好之后,点击安装,然后等待安装完成即可。

若要删除引擎,只要把鼠标移入标签卡里,就会出现卸载按钮,点击即可卸载。

  • VS的下载和安装

当引擎安装完毕之后,桌面上就会出现图标,同时右上角也会出现启动引擎的按钮。无论点击哪个都会打开引擎的预启动界面。第一次启动的时候,时间会很久,因为它要编译引擎启动所需要的材质,界面上会有进度和数量显示,需要耐心等待。

打开之后,这个界面长这样,主要是跟随引擎一起的模板、示例这些。然后可以管理和新建项目。

比如我要新建一个第三人称的示例项目就可以通过点击右侧Games标签来完成。

到这里就需要注意了,如果你是新手还不懂代码,只想用蓝图的话,现在就已经可以开工了。但是如果蓝图不能满足或者未来不能满足你的要求,就必须切换成 C++的版本。由于C++是代码,就必须要安装对应的编译环境才可以工作。这是UE附加的必要条件,只要你用代码,就必须要安装。一般我们是安装Visual Studio 2022的社区版本。因为它是免费的。

也可以手动去这里下载安装:
https://visualstudio.microsoft.com/zh-hans/vs/community/

另外当你切换任意一个示例到C++版本的时候,如果本地没有代码环境,那么会有一个黄字提示需要安装VS 2022,点击也会自动帮你下载。

安装VS的技巧可以参考官网,一些必要的组件需要勾选:
https://dev.epicgames.com/documentation/zh-cn/unreal-engine/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine

一些SDK版本,尽量选最新的。当然选多个也没问题,就是多占点空间而已。

当VS安装完成之后,UE开发必要的组件就已经准备好了。接下来我们就可以运行项目了。

  • Lyra示例工程的下载和安装

Lyra示例工程需要到Fab上先订阅,再在Epic启动器里下载。

Fab上直接搜索Lyra,找到图示的这个项目,点开之后加入到库里。点击在启动器查看,或者直接在启动器里搜索Lyra。

注意,这个库是引擎标签的库,不是最外层的游戏库。找到之后,点击创建,设置好目录,等待下载完成就可以了。

到这里Lyra的工程也就准备完成了。到设定的安装目录下就可以看到工程信息了。

由于Lyra是一个C++工程,在运行之前,必须要先编译才行。右键uproject文件,执行代码工程的生成,完成之后会有一个.sln的文件出现,代表生成成功。

这个时候双击Lyra,就可以打开Lyra工程了。当然,由于Lyra工程引入了大量新的材质,所以第一次启动也是会编译较长时间,请耐心等待,编译后会自动打开编辑器界面。

到这里,本文的目标就已经达成了。

后面这个点是我个人推荐的开发经验,并且我之后也都是会使用这个软件进行代码更新的。推荐大家继续看完,否则可能会影响后续课程的一些理解。因为不同IDE软件的操作和显示是不一样的。

  • Rider的下载和安装

Visual Studio是基础,但Rider专为UE深度优化,提供更智能的代码补全(理解UCLASS, UFUNCTION等)、更便捷的蓝图/C++互跳、更强大的反射信息查看、更直观的调试体验,以及更友好的项目结构管理。它能显著提升阅读和理解引擎和Lyra庞大代码库的效率。

访问以下地址下载Rider for Unreal Engine安装包。运行安装程序,按提示完成安装即可:
https://www.jetbrains.com/lp/rider-unreal/

Rider是一个付费软件,但个人非商业许可是免费的。第一次启动Rider的时候,会提示你选择许可。关联许可之后就可以正常使用Rider了。

在打开Lyra项目之前,推荐先下载一下这个插件,可以更好地关联UE:

不手动安装其实也行,Rider在检查项目完成之后,会提示你是否安装,他会有两个选择,一个是安装在引擎目录下,一个是安装在项目目录下。建议大家安装在引擎目录下,这样在创建其他项目的时候就不用再次安装了。

前面我们用双击uproject的方式打开编辑器,但作为程序员,你应该用IDE的方式打开编辑器。也很简单,用Rider打开它即可。

打开后,界面长这样,右上角两个按钮一个是正常启动,一个是调试模式。选择任何一个都可以。点击启动之后会先检查代码有没有编译,没有的话会先编译。编译好之后就会直接启动编辑器,效果跟双击uproject打开是一样的,但不一样的是调试模式就可以断点调试相关代码和逻辑。

那么到此,本文的内容就全部结束了。


这是侑虎科技第1946篇文章,感谢作者放牛的星星供稿。欢迎转发分享,未经作者授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:793972859)

作者主页:https://www.zhihu.com/people/niuxingxing

再次感谢放牛的星星的分享,如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群:793972859)