Unity中级客户端开发工程师的进阶之路
上期UWA技能成长系统之《Unity高级客户端开发工程师的进阶之路》得到了很多Unity开发者的肯定。通过系统的学习,可以掌握游戏性能瓶颈定位的方法和常见的CPU、GPU、内存相关的性能优化方法。
UWA技能成长系统是UWA根据学员的职业发展目标,提供技能学习的推荐路径,再将所需学习内容按难易等多维度,设计分成多个学习阶段,可以循序渐进地进行学习。
本期我们梳理了Unity中级客户端开发工程师的进阶之路,带大家一起了解,此目标需要掌握哪些技能?学习路径按难易度进行了区分,帮助大家一步步进阶,提升自我。
注:数字1~3 表示难度依次递增
难度1:UGUI、NGUI、物理、C#编程、Lua
难度1. UGUI-基础
该课程通过对Unity引擎UGUI的基础介绍结合具体的实例制作,系统、详细地讲解了UGUI开发的各项实用知识点,主要包括:UI界面布局、自定义Shader效果、UI组件扩展、UI事件系统搭建,以及常用的性能优化方法等。
讲师会手把手带领学员掌握如何搭建高效和酷炫的3D UI系统,并在实践中理解其中涉及到的基础知识、运行机制,以及进阶技巧。
从UI的代码底层讲起,通过理解底层代码的原理来认知上层的有效优化方法。这里会从源码中深入分析UI网格重建的实现原理,并完成了提取触发UI重建的UI元素的代码实现,可以更方便更准确地定位引起UI性能问题的UI元素,从而有针对性地做优化。
在分析Image、Text、Layout等部分源码的同时,也提出使用的注意事项。使开发者在UGUI制作及性能优化方面,更好地达到“知其然,知其所以然”的效果。
“UI开销如何优化?”、“如何定位引起重建的UI元素?”、“UGUI Text如何进行优化?”、“如何合理使用Layout?”、“在设置UI点击事件时有哪些注意事项?”等等这些常见的UI开发问题,都可以在这个课程中得到解答。
不管是行业新人,还是Unity从业者,都不妨来一起领略一番UGUI源码,相信都会有所收获。
难度2. UGUI-框架
从入行到主程再到打杂,我遇到了许多游戏开发者,他们中很多人都曾经做过或正在做UI的开发工作。当问他们觉得怎么样时,普遍的反馈都是:这项工作很简单。赶快学好这基本的能力,去做其他工作。虽然我也是从这个阶段过来的,但当时好像没这么忙。这里不深入讨论对错,毕竟我已经是站着说话不腰疼,但从实际的现状来看,UI这项简单的工作招人通过率很低。
来面试的少年,左MVC、右框架设计,两年工作经验在腰间,人人都会代理绑定。大概觉得这么全面的能力,没啥道理不过吧?其实坦白讲,我做面试官时不太关心是什么,而是关心为什么。项目千千万,做成什么样都不稀奇,核心是为什么要这样做?有没有更好的做法?因此,我通常会问:你觉得NGUI/UGUI的缺点是什么?一般也会顺便问一下:看没看过UI框架源码?如果每天都用的框架底层也没研究透,我觉得这框架设计的功力不听也罢。
扯远了,说回这个课程。我们的主旨是聊聊如何合理地思考问题。不过尬聊实在不符合时代的快节奏,就拿UGUI开刀,讲讲我认为框架搭建的正确姿势。这门课程算是进阶课程,不会提基本的UI知识,因此建议有一定基础的同学购买。
在了解了消息传递原理和UGUI基础框架的扩展方法后,这节课我和大家一起搭建个实用的UI消息框架。UI框架其实涵盖了很多内容,我们这里只讨论消息框架。很多读者肯定会说,绑定消息不就是AddListener嘛。说的对,但我这里说的不只是这点。本质上说,AddListener是更底层和原始的消息使用方式。毕竟大家都是在做商业项目,打仗就要专业,不然会出事的。
和《UI框架搭建:控件定制篇》相同,除了搭建能够独立运行的Demo,在课程中也会谈及面对问题时以何种角度思考。本次内容是在《UI框架搭建:控件定制篇》的基础上深入开发,虽然没有铺垫也可以看懂,但还是建议先看控件定制篇。这门课依然是进阶课程,不会提及基本的UI知识,建议有基础的同学购买。
在实际使用中,我们不可避免地会扩展现有的框架,并添加一些与业务耦合性较强的脚本,这种情况下如何保证松散的耦合关系呢?在使用框架的过程中,我们还有哪些需要注意的地方呢?这节课我们就探讨一下这些问题。
和前面的课程相同,本节课会介绍编码技巧以及方案取舍的逻辑。本次内容是在前面的基础上深入开发,虽然没有铺垫也可以看懂,但还是建议先看《控件定制篇》和《消息重构篇》。这门课程依然是进阶课程,不会提及基本的UI知识,建议有基础的同学购买。
难度2. UGUI-UIToolkit
UIToolkit是Unity打造的全新UI系统,它同时支持运行时与编辑时的UI界面开发,新版本引擎自带布局将全面使用UIToolkit替换,官方已经明确表示后续禁止在提交IMGUI的代码,运行时界面将取代原有的UGUI系统。自Unity 2020.2起UIToolkit已内置在Unity引擎中并非package包的形式,地位已然超过UGUI。
UGUI已经好几年没有在更新了,性能问题一直饱受开发者诟病,还有图文混排、循环滑动列表一类的基础组件缺失,导致每个项目都要单独实现一遍。在性能上UIToolkit更是超越UGUI,它可以1次DrawCall完成所有界面的绘制,UIBuilder编辑器对界面布局上也对策划美术更加友好。
难度2. 物理-模拟
文章主要介绍了基于网格的流体模拟的基本原理及其实现方式,分为4个部分。首先,简单介绍了流体模拟的概念,再是介绍相关的数学基础,然后在理论上从流体方程Navier Stokes入手,对其分解解析,逐步分析公式的每一部分的数学概念和解算过程,最后在Unity上通过Demo实现流体模拟的每一部分的计算并进行讲解。
本课程属于进阶课程,解算过程相对晦涩,适合有一定的图形学基础、数学基础或者Shader编程经验的读者。
难度1. C#编程-基础
市面上有很多书籍和专栏是介绍 C# 基础或者进阶特性的,无一例外,都是从头到尾罗列一遍 C# 特性,然后针对一个个特性去进行讲解和介绍,这种阅读体验相对会比较枯燥。阅读一些大部头的书籍又要占去了大量的业余时间,而有些读者仅仅是想知道其中的某一个语法特性或者仅仅是想达到一个能够开发项目的程度,在读者当时所处的阶段也许并不需要完全地了解 C# 的每一个语法细节和原理。基于以上的种种原因,本课程诞生了。
通读本课程,读者不仅能够过一遍常用的 C# 语法特性,还可以目睹一个知识体系构建的过程,最终还可以得到一个基本的 C# 知识体系。有了一个基本的知识体系之后,未来 C# 发布新的特性时,我们能减少一些恐慌的情绪,知道这个新的特性也许只是一个小的改进,也许是一个革新的特性,可以非常容易地把这个特性归纳到我们现有知识体系中,这就是知识体系的一个小作用。在笔者介绍 C# 的语法特性的过程中,笔者会花费更多的篇幅去介绍不怎么常用但是很重要的 C# 特性,一些大家比较了解且常用的,尤其是在网上随便一搜就能找到的语法特性笔者则会简单带过。
如果想要有一个基础的 C# 知识体系或者好奇一个知识体系是怎样产生的,又不想花费太多时间去看大部头的同学,非常推荐购买本课程。但是并不是说,学习完本课程后就可以不用看大部头了,大部头还是要看的,不过可以留到时间非常充裕的时候再去看,而且学习完本专栏之后再去看大部头会节省更多的时间。
难度2. C#编程-框架
本课程主要介绍了在GitHub上有着极高人气的基于.Net的跨平台、开源、高性能、全栈式开发与多进程分布式部署的网络游戏开发框架 - ET框架的入门使用与原理学习。
难度2. Lua-综合
本议题将重点讲解如何通过Lua来开发一套适合UE游戏项目的开发解决方案。其中不仅介绍UE如何嵌入Lua,而且详细讲解Lua与引擎接口、Lua与蓝图之间如何交互。同时,将更进一步讲解如何使游戏开发全面Lua化,以及如何合理地使用Lua开发以Delicated Server为服务器的各种游戏。希望通过本次分享,可以对目前使用UE引擎进行游戏开发的研发团队有所帮助。
难度2:场景制作、动画、资源管理、内存管理、网络编译、AI
难度2. 场景制作-灯光和场景烘焙
Unity的HDRP是High Definition Render Pipeline的简称,中文名高清渲染管线,它以SRP(Scriptable Render Pipeline)的相关API为基础,构建出一个适合开发高端画质的开发环境。当前,HDRP 7.x已经上线,安装Unity 2019.3.x及以上版本即可创建基于HDRP 7.x默认工程。
从HDRP 7.0版本开始,HDRP正式脱离preview标签,成为正式版,未来HDRP将不会产生太大的框架性的变动。如果你希望获得效果炫酷的照片级渲染效果,现在正是学习HDRP的好时机。
然而,想获得非常高的画质表现,对于烘焙的理解是必不可少的。HDRP的全局光照和Build-in管线的全局光照在Planar Reflection、Screen Space Reflection、Light Layer、Reflection Hierarchy等方面是不同的,所以在一定程度上需要重新学习。当然,有一部分知识与Build-in管线的烘焙也是重合的,例如:Lightmapper参数、光照探针、Lightmap Parameter Asset等等,所以也可以使用本教程的内容作为Build-in管线烘焙的参考。
在HDRP中,通过Lightmap、光照探针、反射探针、Planar Reflection等技术,可以获得优秀的间接光和阴影,让产品的真实度上一个量级。
光照贴图是游戏中很常用的一个技术,不同引擎都有相似但细节处又有很多不同的实现。本文将从原理出发,梳理Unity/UE4等引擎的不同实现,并着重分析项目开发过程中常见但很容易被忽视的精度问题及解决办法,以及很多实际工程中会遇到的问题及对策。
通过对本文阅读,读者能对包括光照贴图、光照探针等一系列全局光照相关技术有所认识,并结合到实际工作中。
难度3. 场景制作-地形制作
《大世界手游开发 - 基于Unity引擎的大世界场景解决方案》
随着行业的飞速发展,游戏世界正在越做越大,当我们用有限的硬件去承载更多的效果和更多的资源时,将面临非常多的挑战。本次报告将介绍朝夕光年江南工作室在Unity引擎中构建大世界场景时,如何探索更优的渲染和资源管理解决方案。
难度1. 网络编译-基础
课程内容涉及到计算机网络体系结构基础知识,包括网络分层、TCP首部与IP首部结构组成,从零开始实现了一个异步多线程网络通信库插件。课程通过简易网络程序引入对底层原理的讲解,再结合实际问题,分析应对策略,最后落实到代码实现。完整讲解了出现问题的原因以及解决问题的方法,结构清晰,层层递进,一目了然。核心内容如下:
1)深入分析了TCP三次握手流程及其作用;
2)详细讲解了TCP协议保证可靠传输的原理;
3)梳理了网络数据在各层之间封装传输的完整流程;
4)解决了TCP协议面向数据流特性所导致的粘包分包问题;
5)开发了异步多线程可扩展、易使用的网络通信库插件;
6)实现了从控制台服务器到Unity客户端的完整聊天案例。
难度1. AI-寻路
玩过游戏的人都知道,游戏里的人物会和我们预想的那样,自己避开障碍物,选择一条最优路径抵达目的地,期间碰到其他角色也会相互避让,为什么他们会走出我们预期的路线,而不至于看起来“蠢蠢的”?这完美的寻路背后依靠的就是我们的寻路算法,一个好的算法就可以让我们的角色走得更“智能”。
本课程将要探讨的是多单位同时寻路的方式。首先,列举了A-star、Dijkstra和Floyd三种常用的寻路算法,并对A-star算法进行了详细介绍,然后分析了几种常用算法的优缺点,最后介绍了流场的生成以及流场效率优化的方向,同时提供了RTS千人寻路算法的实现方案,并附上了Demo帮助大家理解学习。
课程属于初级课程,旨在让大家了解目前常用的寻路方法和原理,在应用到实际项目中,依然需要根据自身项目情况进行修改和完善。
这篇文章将向读者提供一个完整详细的解决方案。主要内容包括RecastNavigation的基本原理,Unity NavMesh导航数据导出的详细算法流程。同时附带的项目工程则包含了完整的导出算法的实现,数据存储,以及导出数据在RecastNavigation系统中的加载。整个工程包含两部分:工程一是基于 RecastNavigation系统的导出算法和实现工程,构建后将输出dll和bundle文件,作为Unity编辑器中的Native Plugin,来实现导出导航数据的功能,支持 Win32/Win64/OSX64(OSX32需要自己使用旧版本 XCode 设置和编译),同时还包括一个修改版本的RecastNavigation Demo,可以加载从Unity导出的NavMesh来显示;工程二是一个Unity导出NavMesh的示例工程,使用了前者编译的插件来导出当前场景烘焙的NavMesh导航数据。
难度3:渲染
难度2. 渲染-后处理
屏幕后处理效果(Screen Post Processing Effects),是游戏中实现屏幕特效的方法,有助于提升画面效果。
本篇讲解的是图像模糊算法。在游戏中经常被应用的屏幕后处理特效,例如炫光(Bloom)、景深(Depth of Field)、镜头光晕(Glare Lens Flare)、体积光(Volume Ray)等效果,都用到了图像模糊算法。
从图像处理领域的角度来看,图像模糊算法是一种低通滤波算法。经过低通滤波器处理后的图像效果看起来像是将图像变模糊了,故而被应用到屏幕后处理特效中。图像模糊算法有很多经典算法,例如:高斯模糊算法(Gaussian Blur)、盒式模糊(Box Blur)、Kawase Blur和Dual Blur等。在本篇中将结合Demo学习相关算法及其优化算法,探究其应用与优化方式。
屏幕后处理效果(Screen Post Processing Effects),是游戏中实现屏幕特效的方法,有助于提升画面效果。
本篇讲解的是常见后处理效果,将结合Demo学习在游戏中经常被应用的屏幕后处理特效,例如眩光(Bloom)、景深(Depth of Field)、镜头光晕(Lens Flare)等效果的相关实现方式及其实际项目应用中的优化方式。
该课程主要讲解了部分Unity引擎屏幕后处理的具体实现方法,包括色调调整、屏幕扭曲、抗锯齿、Bloom、景深、高度雾等,一步步教你如何实现屏幕后处理效果,并且讲解如何灵活使用Unity官方Post Processing,最后介绍几款当前热门且游戏研发团队常用的屏幕后处理插件,主要包括:Mobile Lighting Box、MK Glow、2D Weather Effects和100 Post Processing Styles,供大家参考学习。
从基本的后处理渲染流程入手,学习DepthOfField渲染流程中的各个部分及原理,分别从如何通过深度图计算出模糊圈、计算焦外模糊效果,如何把模糊图与原图混合完成焦点清晰、焦外模糊的景深效果入手,通过剖析其每一步的原理与GPU耗时,分析思考对其进行优化,从而提高渲染效率。希望读者们可以通过此文学习并掌握后处理性能优化的方法。
难度2. 渲染-Shadow
该视频课程主要讲解当前中国Unity项目研发过程中最为常用且实用的三种阴影实现方案:基于ShadowMap的阴影渲染技术、基于Projector&RenderTexture的阴影渲染技术和适合于特殊场合的Flat Shadow渲染技术。我们分别详细介绍了其理论原理及其在Unity引擎中的具体实现和使用细节,以期让大家能够全面了解和掌握Unity项目开发过程中阴影渲染相关的实用技术方案。
另外,该课程还重点讲解了目前三款Unity Asset Store中非常受研发团队欢迎的阴影相关插件:MobileFastShadow、FastShadows以及FastShadowReceiver。大家不仅可以了解其实现原理和适用场景,同时也可以结合自身项目来采用对应的阴影实现方案及优化方案。
文章介绍了如何不使用任何光照来实现角色自阴影,并且能够适应于各类高中低配手机。
1)从实际需求入手,逆推解决问题方法,从目的反向找出正确的处理流程,除了能够学习到如何不用光做出光影效果,更能掌握解决问题的方法;
2)从性能入手,让大家对自阴影的性能知根知底;
3)最后附带Demo的代码,更能让大家立刻在项目中将其实装,提升自己游戏的表现力。
这门课程虽然不属于基础课程,但对渲染有兴趣或者刚开始学习渲染的同学也能从中受益。
难度2. 渲染-Batch
《如何高效使用GPU Instancing技术来进行草丛渲染》
游戏中经常需要在一个屏幕内渲染大量重复的物体。例如一望无际的广阔草原,郁郁葱葱的原始森林,流光溢彩的满地珠宝等等。在Unity开发中遇到类似需求的时候,很容易碰到性能瓶颈,导致设备卡顿发热。本文以草海渲染需求为例,详细介绍如何使用GPU Instancing技术进行渲染及性能优化。希望大家通过该文章可以了解和掌握以下内容:
1)如何对场景中的海量重复物体(比如草海)进行高效渲染;
2)在使用GPU Instancing功能时,我们该注意哪些方面。
如果能攻克以上课程,恭喜你已经具备一位Unity中级客户端开发工程师的能力啦!更多关于游戏、AR/VR应用开发的课程内容,可以关注UWA学堂(edu.uwa4d.com)。