用户体验在所有游戏中都是重要的组成部分,它不仅包括游戏的剧情和玩法也包括运行时画面的流畅性、与多人服务器连接的可靠性、用户输入的响应性,甚至由于移动设备和云下载的流行,它还包括最终程序文件的大小。由于Unity等工具提供了大量有用的开发功能,还允许个人开发者访问,因此游戏开发的门槛已大大降低。然而,由于游戏行业的竞争激烈,玩家对游戏最终品质的期望日益提高,因此就要求游戏的各方面应能经得起玩家和评论家的考验。
性能优化的目标与用户体验密不可分。缺乏优化的游戏会导致低帧率、卡顿崩溃、输入延迟、过长的加载时间、不一致和令人不舒服的运行时行为、物理引擎的故障,甚至过高的电池消耗(移动设备通常被忽略的指标)。只要遭遇上述问题之一,就是游戏开发者的噩梦,因为即使其他方面都做得很好,评论也会只炮轰做得不好的一个方面。
性能优化的目标之一是最大化地利用可用资源,包括CPU资源,如消耗的CPU 循环数、使用的主内存空间大小(称为 RAM),也包括 GPU 资源(GPU 有自己的内存空间,称为VRAM),如填充率、内存带宽等。然而,性能优化最重要的目标是确保没有资源会不合时宜地导致性能瓶颈,优先级最高的任务得到优先执行。哪怕很小的、间歇性的停顿或性能方面的延迟都会破坏玩家的体验,打破沉浸感,限制开发人员尝试创建体验的潜力。另一个需要考虑的事项是,节省的资源越多,在游戏中创建的活动便越多,从而产生更有趣、更生动的玩法。
同样重要的是,要决定何时后退一步,停止增强性能。在一个拥有无限时间和资源的世界里,总会有一种方法能让游戏变得更出色、更快、更高效。在开发过程中,必须确定产品达到了可接受的质量水平。如果不这样做,就会重复实现那些很少或没有实际好处的变更,而每个变更都可能引入更多的bug。
判断一个性能问题是否值得修复的最佳方法是回答一个问题:“用户会注意到它吗?”如果这个问题的答案是“不”,那么性能优化就是白费力气。软件开发中有句老话:
过早的优化是万恶之源。
过早优化是指在没有任何必要证据的情况下,为提高性能而重新编写和重构代码。这可能意味着在没有显示存在性能问题的情况下进行更改,或者进行更改的原因是,我们只相信性能问题可能源于某个特定的领域,但没有证据证明的确存在该问题。
当然,Donald Knuth 提出的这一常见说法的含义是,编写代码时应该避免更直接、更明显的性能问题。然而,在项目末尾进行真正的性能优化将花费很多时间,而我们应该做好计划,以正确地改善项目,同时避免在未进行验证的情况下实施开销更大和更耗时的变更。这些错误会使整个软件开发团队付出沉重的代价为没有成效的工作浪费时间是令人沮丧的。
本书介绍在 Unity 程序中检测和修复性能问题所需的工具、知识和技能,不管这些问题源于何处。这些瓶颈可能出现在 CPU、GPU 和RAM 等硬件组件中,也可能出现在物理、渲染和 Unity 引擎等软件子系统中。
在每天充斥着高质量新游戏的市场中,优化游戏的性能将使游戏具有更大的成功率,从而增加在市场上脱颖而出的机会。
本书适合想要学习优化技术,用新的Unity版本创建高性能游戏的游戏开发者。
第1章探索 Unity Profler,研究剖析程序、检测性能瓶颈以及分析问题根源的一系列方法。
第2 章学习 Unity 项目中 C#脚本代码的最佳实践,最小化 MonoBehaviour 回调的开销,改进对象间的通信等。
第3章探索 Unity 的动态批处理和静态批处理系统,讨论如何使用它们减轻渲染管线的负担。
第4章介绍艺术资源的底层技术,学习如何通过导入、压缩和编码避免常见的陷阱。
第5 章研究 Unity 内部用于 3D 和 2D 游戏的物理引擎的细微差别,以及如何正确地组织物理对象,以提升性能。
第6章深入探讨渲染管线,如何改进在GPU或CPU上遭受渲染瓶颈的应用程序,如何优化光照、阴影、粒子特效等图形效果,如何优化着色器代码,以及一些用于移动设备的特定技术。
第7章关注 VR 和 AR 等娱乐媒介,还介绍了一些针对这些平台构建的程序所独有的性能优化技术。
第8章讨论如何检验 Unity 引擎、Mono 框架的内部工作情况,以及这些组件内部如何管理内存,以使程序远离过高的堆分配和运行时的垃圾回收。
第9章研究了多线程密集型游戏的Unity 优化--DOTS,介绍了新的C#作业系统、新的 Unity ECS 和 Burst 编译器。
第10章讲解了如何将 Skinned MeshRenderer转为MeshRenderer,同时启用GPU Instancing 优化大量动画对象。本章由译者根据本书内容所编写,对Unity的较新技术做了补充。
第 11 章介绍 Unity 专家用于提升项目工作流和场景管理的大量有用技术。
//可收藏下方导读文章,从而查看本书其他内容
Unity游戏优化