本篇文章会对我开的这个 『Unity精品学习专栏』 做一个简单的概述,简而言之就是一个目录。
后面我会根据这个目录来写对应的优化文章,后期可能有所变动,也会同步修改更新的!
下面是一个大概的优化结构,可以一起来看一下
目前暂定以这个大纲为主,后面会根据这个概述的内容进行更新(计划2022年更完~)
如果觉得 小Y 整理的这个大纲有什么地方不到位的,也可以指出参考呀!
Unity优化部分内容实际上细分的话有很多,这里只是把最常用的一部分列出来了。
上图中出现的基本上就是项目中都会用到的几个部分,所以说每个部分都是重点!
下面针对这几个部分做一个简单的概述,后面再详细介绍。
谈及,作为一个程序员来说,应该都知道是怎么一回事。
我觉得 和 其实很像。
我们在生活中使用最少的钱去买最实用的物品是性价比最高的。
同理,如何让程序在最省性能的情况下去完美执行同一个功能 就可以理解成 优化。
一般来说,要实现某个功能,我们可以有N种做法,就跟一个数学题有很多种题解一样。
我们要做的 就是以一种 的方式用编程做出这道题!
在Unity中有一个自带的性能分析工具 Unity Profiler
使用这个工具可以让我们在程序运行时,实时便捷的观察一些性能所需要的数据。
还有 性能分析的方法,有以下几部分
具体详细信息可以来这篇文章学习:【Unity 优化篇】| 优化的基本概念/意义,Unity Profiler工具的使用 以及 性能分析的方法【精华收藏】
说完了基本的 优化概念/意义 那接下来就是实际操作部分了
那首先想到的就是脚本代码优化了,因为 优化代码 是最基础的,也是最直观的一种优化方法。
关于 脚本代码优化的策略 也有很多,后面也会针对重点出几篇博文来介绍详细内容,这里先简单介绍一下。
还有一些其他需要注意的点,如下图所示:
目前也是写了两篇文章来介绍部分脚本代码优化策略的文章:
【Unity优化篇】 | Unity脚本代码优化策略,快速获取 游戏对象 和 组件 的方法
【Unity优化篇】 | Unity脚本代码优化策略,空引用快速检索、使用合适的数据结构、禁用脚本和对象等 性能优化方法
该部分的文章目前也只是讲了一下最基本的表面上很好解决的部分,脚本代码的地方钻研下去还是有很多难点的。
这里说的 UI优化 指得是Unity的 ,也是目前主流用的UI系统,其他的就不做介绍了
UI优化 这块的话核心其实就一个地方:降低DrawCall
DrawCall 可以理解成 CPU向GPU每发出一条渲染指令,这个过程就可以称作一个DrawCall
降低DrawCall 的方法有很多种,比较常用的有层级控制、图集制作、Mask、Graphics Rebuild等等
后面会单独写文章来介绍这部分的关键内容,这里先简单说一下大概思路,方便后续学习整理。
物理引擎是Unity中的一类独特的子系统,其行为和一致性是影响产品质量的主要因素。
这部分主要是介绍减少Unity物理引擎中的CPU峰值、开销和内存消耗的方式,同时包括改变物理行为的方法,在保持游戏质量的同时优化性能。
主要包括下面几个部分:
目前介绍部分物理引擎优化策略的文章:
【Unity优化篇】| Unity3D场景 常用优化策略,遮挡剔除、层消隐距离技术 和 LOD多层次细节
后续详细文章出来之后会在这里更新,这里暂时展示这些。
图形渲染 这一部分无疑是相当复杂的,UI处理其实也可以归纳为这部分之下。
这里的话我们就从管道渲染、CPU和GPU的逻辑处理等方面开始学习介绍。
学习如何收集正确的数据,深入了解管道渲染,探索各种解决方案和潜在的一些其它问题。
包括下面这几部分:
后面讲到这部分的时候会先简单的介绍管道渲染等一些基本的理念。
是3D图形和游戏中一个通用的术语,它描述了将大量的任意数据块组合到一起并将它们作为单个大数据块进行处理的过程。
这对于 CPU和GPU 是非常友好的,因为它可以使用 多个内核同时处理多个任务 。
批处理对象 指的是 网格、顶点、边、UV坐标和其他用于描述3D对象的不同数据类型的大集合。
也可以简单的代表 批处理音频文件、精灵、纹理文件和其他大数据集的行为。
本系列这部分讲的主要是两种用于 批处理网格数据 的主要机制:动态批处理 和 静态批处理。
这两种方法本质上是几何体合并的两种形式,用于将多个对象的网格合并到一起,并在单一指令中渲染他们,而不是单独准备和绘制每个几何体。
这部分主要介绍一下内容
后续详细内容请看具体的文章,敬请期待相关文章~
前边的内容基本上已经把Unity中一些重要的子系统优化技巧都介绍了,那接下来就来看看怎样优化 。
这里说的艺术类资源,指的是Unity中的音频、纹理和动画方面,这块的核心其实是美术分工来搞的。
但是既然是一个完整的Unity项目,那我们就应该对这方面有所了解,程序 跟 美术 协商好才能完成更好的一个效果。
无论是视图最小化运行时的内存占用,保持尽可能小的可执行文件大小,最大限度的提高加载速度,保持帧速率的一致性等等其他技巧。
都有多种选项提供给我们进行选择,多数情况下结果应该都是很理想的,但是也有些方法在我们采用之前是值得考虑的。
因为在优化过程中,除了一开始可能进行了某些没必要的操作 浪费了一些性能之外,后期基本上就是选择牺牲某个子系统的消耗来达到我们迫切所需的一个优化结果。比如美术方面就是一个很好的例子,往往可能需要降低质量来提高性能。
那这部分就会针对音频、纹理和网格 动画来做一个详细的优化过程,下面先来看看内容简介:
后续详细内容请看具体的文章,敬请期待相关文章~
上面的好几个部分都是涉及到内存优化,实际上内存优化的涉及范围很广,所以这里我们再来梳理一下内存管理相关内容。
既然涉及到,那就不可避免的需要涉及到底层原理。
研究底层原理是一件领开发人员头疼的事,大多数的开发者更喜欢在上层做开发,只需要实现游戏玩法、关卡设计 和 艺术资源管理即可。
但是内存效率是性能优化的一个重要元素,这使得我们必须去研究到一些底层部分,这也是走向高级开发工程师必须要走的一步!
只有对Unity引擎底层、Mono平台 和C#语言有较为深刻的理解 才能通过Unity高效的使用内存。
本部分就来理解内存分配 和 C#语言特性,他们如何与Mono平台交互以及Mono如何与Unity引擎交互。
通过本节可以学到Unity引擎底层的方方面面,如:Mono平台、C#语言、IL2CPP 以及 .NET Framework。
大致内容整理如下:
后续详细内容请看具体的文章,敬请期待相关文章~
资料白嫖,技术互助
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Unity系统学习专栏 🧡 | 入门级 | 本专栏从Unity入门开始学习,快速达到Unity的入门水平 |
💛 Unity实战类项目 💛 | 进阶级 | 计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。 |
游戏制作专栏 | 难度偏高 | 分享学习一些Unity成品的游戏Demo和其他语言的小游戏! |
💚 游戏爱好者八万人社区💚 | 互助/吹水 | 八万人游戏爱好者社区,聊天互助,白嫖奖品 |
💙 Python零基础到入门 💙 | Python初学者 | 针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门 |
温馨提示: 点击下面卡片可以获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!