猜你喜欢
Unity 游戏优化(第2版)

Unity 游戏优化(第2版)

书籍作者:[英] 克里斯·迪金森 ISBN:9787302550518
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:6995
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

● 使用Unity Profiler查找程序中任何地方的瓶颈,并发现解决它们的方法。

● 实现C#脚本编写的更佳实践,避免常见误区。

● 深入理解渲染管线,通过减少绘制调用和避免填充率瓶颈来更大化渲染管线的性能。

● 以大多数开发者都能理解的方式增强着色器,通过微妙而有效的性能调整优化它们。

● 充分利用物理引擎使场景尽可能保持动态。

● 组织、过滤并压缩艺术资源,保持高品质的同时更大化性能。

● 发现VR项目中各种严重的性能问题,找到解决它们的方法。

● 使用Mono框架和C#实现底层强化以更大化内存使用,避免垃圾回收。

● 了解项目组织的更佳实践,通过改进工作流来节省时间。


作者简介

  蔡俊鸿,拥有多年游戏开发经验,全程主导多个千万级IP游戏的客户端和服务器开发。擅长服务器和客户端的架构设计以及性能优化、客户端渲染等。目前就职于昆仑万维GameArk,担任技术总监一职。
  
  Chris Dickinson,在英格兰一个安静的小角落里长大,对数学、科学,尤其是电子游戏满怀热情。他喜欢玩游戏并剖析游戏的玩法,并试图确定它们是如何工作的。Chris在获得电子物理学的硕士学位后,他飞到美国加州,在硅谷中心的科学研究领域工作。不久后,他不得不承认,研究工作并不适合他的性格。在四处投简历之后,他找到了一份工作,最终让他走上了软件工程的正确道路(据说,这对于物理学毕业生来说并不罕见)。
  Chris是IPBX电话系统的自动化工具开发人员,这段时间的工作更适合他的性格。现在,他正在研究复杂的设备链,帮助开发人员修复和改进这些设备,并开发自己的工具。Chris学习了很多关于如何使用大型、复杂、实时、基于事件、用户输入驱动的状态机的知识。在这方面,Chris基本上是自学成才的,他对电子游戏的热情再次高涨,促使他真正弄清楚电子游戏是如何创建的。当他有足够的信心时,他回到学校攻读游戏和模拟编程的学士学位。当他获得学位时,他已经在用C++编写自己的游戏引擎(尽管还很初级),并在日常工作中经常使用这些技能。然而,如果想创建游戏,应该只是创建游戏,而不是编写游戏引擎。因此,Chris选择了他喜欢的公开发行的游戏引擎——一个称为Unity3D的优秀小工具-一并开始制作一些游戏。
  经过一段时间的独立游戏开发,Chris遗憾地决定,这条特定的职业道路的要求并不适合他,但他在短短几年积累的知识量,以大多数人的标准来看,都令人印象深刻,他喜欢利用这些知识帮助其他开发人员创建作品。从那以后,Chris编写了一本关于游戏物理的教程(Learning Game Physics with Bullet Physics and OpenGL,Packt Publishing)和两本关于Unity性能优化的书籍。他娶了他一生的挚爱Jamie,并开始在加州圣马特奥市的Jaunt公司工作,研究酷的现代技术,担任测试领域的软件开发工程师(SDET),这是一家专注于提供VR和AR体验(例如360视频)的虚拟现实/增强现实初创公司。
  工作之余,Chris一直抵抗对棋盘游戏的沉迷(特别是《太空堡垒:卡拉狄加与血腥狂怒>),他痴迷于暴雪的《守望先锋》和《星际争霸2》,专注地盯着Unity新版本,在纸上勾画出一组关于游戏的构思。

编辑推荐

Unity是一个令人惊叹的游戏开发框架,它包含大量的特性集且易于使用,有助于将一些最炫酷的处理和渲染功能呈现给业余爱好者和专业人士。

  本书展示了如何使用Unity 2017提升游戏性能,并演示高性能不仅局限于预算高的游戏。

  由于没有什么能比糟糕的用户体验更快地让玩家远离游戏,因此本书首先解释了如何使用Unity Profiler检测问题,学习如何使用秒表、计时器和日志方法诊断问题。

  接着介绍Unity内置的批处理流程,它们何时能用于提升性能;分析将在运行时使用最小化的空间、CPU和内存导入艺术资源,并发掘一些未充分利用的特性和方法,来管理资源数据。

  然后深入研究Unity3D引擎的底层,讨论一些只有深入了解其内部工作原理的情况下才能理解的问题。

  本书最后学习如何适当地组织资源来改进开发工作流,以及如何通过对象池快速有效地实例化资产。


前言

  用户体验在所有游戏中都是重要的组成部分,它不仅包括游戏的剧情和玩法,也包括运行时画面的流畅性、与多人服务器连接的可靠性、用户输入的响应性,甚至由于移动设备和云下载的流行,它还包括最终程序文件的大小。由于Unity等工具提供了大量有用的开发功能,还允许独立开发者访问,游戏开发的门槛已经大大降低了。然而,由于游戏行业的竞争激烈,玩家对游戏最终品质的期望与日俱增,游戏的各方面应该能经得起玩家和评论家的考验。
  性能优化的目标与用户体验密不可分。缺乏优化的游戏会导致低帧率、卡顿、崩溃、输入延迟、过长的加载时间、不一致以及令人不舒服的运行时行为,以及物理引擎的故障甚至过高的电池消耗(移动设备通常被忽略的指标)。只要遭遇上述问题之一,就是游戏开发者的噩梦,因为其他方面都做得很好,评论也只炮轰做得不好的一个方面。
  性能优化的目标之一是最大化地利用可用资源,包括CPU资源,如消耗的CPU循环数、使用的主存空间大小(称为RAM),也包括GPU资源[GPU有自己的内存空间(称为VRAM)]、填充率、内存带宽等。然而,性能优化最重要的目标是确保没有哪个资源不合时宜地导致性能瓶颈,优先级最高的任务得到优先执行。哪怕很小的、间歇性的停顿或性能方面的延迟都会破坏玩家的体验,打破沉浸感,限制我们尝试创建体验的潜力。另一个需要考虑的事项是,节省的资源越多,便能够在游戏中创造出更多的活动,从而产生更有趣、更生动的玩法。
  同样重要的是,要决定何时后退一步,停止增强性能。在一个拥有无限时间和资源的世界里,总会有另一种方法让游戏变得更好、更快、更高效。在开发过程中,必须确定产品达到了可接受的质量水平。如果不这样做,就会重复实现那些很少或没有实际好处的变更,而每个变更都可能引入更多的bug。
  判断一个性能问题是否值得修复的最佳方法是回答“用户会注意到它吗?”。如果这个问题的答案是“不”,那么性能优化就是白费力气。软件开发中有句老话:

目录

第1章 研究性能问题
1.1 UnityProfiler
1.1.1 启动Profiler
1.1.2 Profiler窗口
1.2 性能分析的最佳方法
1.2.1 验证脚本是否出现
1.2.2 验证脚本次数
1.2.3 验证事件的顺序
1.2.4 最小化正在进行的代码更改
1.2.5 最小化内部影响
1.2.6 最小化外部影响
1.2.7 代码片段的针对性分析
1.3 关于分析的思考
1.3.1 理解Profiler工具
1.3.2 减少干扰
1.3.3 关注问题
1.4 本章小结

第2章 脚本策略
2.1 使用最快的方法获取组件
2.2 移除空的回调定义
2.3 缓存组件引用
2.4 共享计算输出
2.5 Update、Coroutines和Invoke Repeating
2.6 更快的Game Object空引用检查
2.7 避免从Game Object取出字符串属性
2.8 使用合适的数据结构
2.9 避免运行时修改Transform的父节点
2.10 注意缓存Transform的变化
2.11 避免在运行时使用Find()和Send Message()方法
2.11.1 将引用分配给预先存在的对象
2.11.2 静态类
2.11.3 单例组件
2.11.4 全局消息传递系统
2.12 禁用未使用的脚本和对象
2.12.1 通过可见性禁用对象
2.12.2 通过距离禁用对象
2.13 使用距离平方而不是距离
2.14 最小化反序列化行为
2.14.1 减小序列化对象
2.14.2 异步加载序列化对象
2.14.3 在内存中保存之前加载的序列化对象
2.14.4 将公共数据移入Scriptable Object
2.15 叠加、异步地加载场景
2.16 创建自定义的Update()层
2.17 本章小结

第3章 批处理的优势
3.1 Draw Call
3.2 材质和着色器
3.3 Frame ebugger
3.4 动态批处理
3.4.1 顶点属性
3.4.2 网格缩放
3.4.3 动态批处理总结
3.5 静态批处理
3.5.1 Static标记
3.5.2 内存需求
3.5.3 材质引用
3.5.4 静态批处理的警告
3.5.5 静态批处理总结
3.6 本章小结
……

第4章 着手处理艺术资源
第5章 加速物理
第6章 动态图形
第7章 虚拟速度和增强加速度
第8章 掌握内存管理
第9章 提示与技巧

短评

不错的一本书,前辈推荐的,做unity性能优化必备读物

2020-05-29 11:33:30

好好学习,天天向上。。。

2020-05-29 18:58:41

新书到了,书的内容不错,目前第一本书关于优化方面的,期待下一版本更多丰富内容。

2020-05-29 12:05:12

图书质量很好,内容也是非常符合我的需要。快递小哥很辛苦,一下子送来好几本书,气喘吁吁的,真的很感动。

2020-05-23 22:44:24

产品特色