正版保障 假一赔十 可开发票
¥ 65.89 6.7折 ¥ 98 全新
库存14件
作者[意]大卫·阿韦尔萨,[英]克里斯·迪金森
出版社清华大学出版社有限公司
ISBN9787302613282
出版时间2021-03
装帧平装
开本32开
定价98元
货号11749298
上书时间2025-01-03
用户体验在所有游戏中都是重要的组成部分,它不仅包括游戏的剧情和玩法,也包括运行时画面的流畅性、与多人服务器连接的可靠性、用户输入的响应性,甚至由于移动设备和云下载的流行,它还包括最终程序文件的大小。由于Unity等工具提供了大量有用的开发功能,还允许个人开发者访问,因此游戏开发的门槛已大大降低。然而,由于游戏行业的竞争激烈,玩家对游戏最终品质的期望日益提高,因此就要求游戏的各方面应能经得起玩家和评论家的考验。
性能优化的目标与用户体验密不可分。缺乏优化的游戏会导致低帧率、卡顿、崩溃、输入延迟、过长的加载时间、不一致和令人不舒服的运行时行为、物理引擎的故障,甚至过高的电池消耗(移动设备通常被忽略的指标)。只要遭遇上述问题之一,就是游戏开发者的噩梦,因为即使其他方面都做得很好,评论也会只炮轰做得不好的一个方面。
性能优化的目标之一是最大化地利用可用资源,包括CPU资源,如消耗的CPU循环数、使用的主内存空间大小(称为RAM),也包括GPU资源(GPU有自己的内存空间,称为VRAM),如填充率、内存带宽等。然而,性能优化最重要的目标是确保没有资源会不合时宜地导致性能瓶颈,优先级最高的任务得到优先执行。哪怕很小的、间歇性的停顿或性能方面的延迟都会破坏玩家的体验,打破沉浸感,限制开发人员尝试创建体验的潜力。另一个需要考虑的事项是,节省的资源越多,在游戏中创建的活动便越多,从而产生更有趣、更生动的玩法。
同样重要的是,要决定何时后退一步,停止增强性能。在一个拥有无限时间和资源的世界里,总会有一种方法能让游戏变得更出色、更快、更高效。在开发过程中,必须确定产品达到了可接受的质量水平。如果不这样做,就会重复实现那些很少或没有实际好处的变更,而每个变更都可能引入更多的bug。
判断一个性能问题是否值得修复的最佳方法是回答一个问题:“用户会注意到它吗?”如果这个问题的答案是“不”,那么性能优化就是白费力气。软件开发中有句老话:
过早的优化是万恶之源。
过早优化是指在没有任何必要证据的情况下,为提高性能而重新编写和重构代码。这可能意味着在没有显示存在性能问题的情况下进行更改,或者进行更改的原因是,我们只相信性能问题可能源于某个特定的领域,但没有证据证明的确存在该问题。
当然,Donald Knuth提出的这一常见说法的含义是,编写代码时应该避免更直接、更明显的性能问题。然而,在项目末尾进行真正的性能优化将花费很多时间,而我们应该做好计划,以正确地改善项目,同时避免在未进行验证的情况下实施开销更大和更耗时的变更。这些错误会使整个软件开发团队付出沉重的代价,为没有成效的工作浪费时间是令人沮丧的。
本书介绍在Unity程序中检测和修复性能问题所需的工具、知识和技能,不管这些问题源于何处。这些瓶颈可能出现在CPU、GPU和RAM等硬件组件中,也可能出现在物理、渲染和Unity引擎等软件子系统中。
在每天充斥着高质量新游戏的市场中,优化游戏的性能将使游戏具有更大的成功率,从而增加在市场上脱颖而出的机会。
本书内容
本书适合想要学习优化技术,用新的Unity版本创建高性能游戏的游戏开发者。
第1章探索Unity Profiler,研究剖析程序、检测性能瓶颈以及分析问题根源的一系列方法。
第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 2019和Unity 2020的特性和增强功能。书中讨论的很多技术可应用到Unity 2018或更旧版本的项目中,但这些版本列出的特性可能会有所不同,这些差异会在适当的地方突出显示。
值得注意的是,书中的代码应该用于Unity 2020,但在撰写本文时,只能在alpha版本上进行测试。额外的不兼容性可能会出现在Unity 2020的非alpha阶段。
下载示例代码文件
本书提供相关代码、参考网站,以及本书中使用的屏幕截图、图表的彩色图像,可以扫描本书封底的二维码下载。
如果代码有更新,在现有的GitHub存储库上也会有更新。
约定
代码块的格式设置如下:
void DoSomethingCompletelyStupid() {
Profiler.BeginSample("My Profiler Sample");
List<int> listOfInts = new List<int>();
for(int i = 0; i < 1000000; i) {
listOfInts.Add(i);
}
Profiler.EndSample();
}
注意:警告或重要提示出现在此处。
提示:提示和技巧出现在此处。
读者反馈
欢迎读者提供反馈。
如果你对本书的任何内容有问题,请在电子邮件的主题中提到本书的标题,并发送电子邮件到bookservice@263.net。
主要内容:
使用Unity Profiler发现程序中的瓶颈并找到解决方法
发现VR项目中关键的性能问题,并学习如何处理它们
以易用的方式增强着色器,通过细微而有效的性能调整优化它们
使用物理引擎使场景尽可能动态化
组织、过滤和压缩艺术资源,在保持高品质的同时实现性能最大化
使用Mono框架和C#实现内存利用最大化,以及优化GC
Aversa博士拥有意大利罗马大学(University of Rome La Sapienza)的人工智能博士学位以及人工智能和机器人硕士学位。他对用于开发交互式虚拟代理和程序内容生成的人工智能有着浓厚的兴趣。他曾担任电子游戏相关会议的程序委员会成员,如IEEE计算智能和游戏会议,也经常参加game-jam比赛。他还经常撰写有关游戏设计和游戏开发的博客。
我要感谢家人在这一年里给我提供了稳定的生活;感谢Twitter上的Unity开发者帮助我澄清了Unity内部最模糊的元素;还要感谢Keagan和Packt Publishing的其他编辑帮助我完成这项工作,并对我延迟交稿表示理解。
Chris Dickinson在英格兰一个安静的小镇长大,对数学、科学,尤其是电子游戏满怀热情。他喜欢玩游戏并剖析游戏的玩法,并试图确定它们是如何工作的。在看了爸爸破解一个PC游戏的十六进制代码来规避早期的版权保护后,他完全震惊了,他对科学的热情在当时达到了顶峰。Chris获得电子物理学的硕士学位后,他飞到美国加州,在硅谷中心的科学研究领域工作。不久后,他不得不承认,研究工作并不适合他。在四处投简历之后,他找到了一份工作,最终让他走上了软件工程的正确道路(据说,这对于物理学专业毕业生来说并不罕见)。
Chris是IPBX电话系统的自动化工具开发人员,他的性格更适合从事该工作。现在,他正在研究复杂的设备链,帮助开发人员修复和改进这些设备,并开发自己的工具。Chris学习了很多关于如何使用大型、复杂、实时、基于事件、用户输入驱动的状态机方面的知识。在这方面,Chris基本上是自学成才的,他对电子游戏的热情再次高涨,促使他真正弄清楚了电子游戏的创建方式。当他有足够的信心时,他回到学校攻读游戏和模拟编程的学士学位。当他获得学位时,已经可以用C 编写自己的游戏引擎(尽管还很初级),并在日常工作中经常使用这些技能。然而,由于想创建游戏(应该只是创建游戏,而不是编写游戏引擎),Chris选择了他最喜欢的公开发行的游戏引擎——一个称为Unity3D的优秀小工具,并开始制作一些游戏。
经过一段时间的独立开发游戏,Chris遗憾地决定,这条特定的职业道路并不适合他,但他在短短几年内积累的知识,以大多数人的标准来看,令人印象深刻,他喜欢利用这些知识帮助其他开发人员创建作品。从那以后,Chris编写了一本关于游戏物理的教程(Learning Game Physics with Bullet Physics and OpenGL,Packt Publishing)和两本关于Unity性能优化的书籍。他娶了他一生的挚爱Jamie,并在加州圣马特奥市的Jaunt公司(这是一家专注于提供VR和AR体验(如360视频)的虚拟现实/增强现实初创公司)工作,研究最酷的现代技术,担任测试领域的软件开发工程师(SDET)。
工作之余,Chris一直苦恼于对棋盘游戏的沉迷(特别是《太空堡垒:卡拉狄加与血腥狂怒》),他痴迷于暴雪的《守望先锋》和《星际争霸2》,专注于Unity最新版本,经常在纸上勾画关于游戏的构思。不久的将来,当时机成熟的时候(当他不再懈怠时),相信他的计划就会实现。
Unity引擎提供的一系列卓越功能可以帮助开发 者构建高性能的游戏。本书引导读者优化游戏开发中的方方面面,从游戏角色到脚本,一直到动画优化。
在本书中,读者将学习提高游戏脚本质量的代码编写技术,学习如何使用E C S和Burs t编译器等Unity技术优化游戏。本书将助力读者使用Unity生态系统管理第三方工具,引导读者解决Unity大型游戏和V R游戏中的性能问题,帮助读者检测性能问题并分析性能根源。随着阅读的深入,读者将学习Unity C#脚本代码的最佳实践并掌握使用模式,之后会掌握优化音频资源和纹理文件,以及高效地存储和使用资源文件。然后,读者将了解渲染管线并学习如何识别管线中的性能问题。此外,读者还将学习如何优化内存以及Unity的处理器单元。最后,读者将获得Unity专家用于提升项目工作流的提示和技巧。
阅读本书,读者将提升使用Unity及其组件构建交互式游戏所需的技能。
— 没有更多了 —
以下为对购买帮助不大的评价