Unity 游戏优化(第2版)
作 者:(英)克里斯·迪金森(Chris Dickinson) 著 蔡俊鸿,雷鸿飞 译
定 价:98
出 版 社:清华大学出版社
出版日期:2020年05月01日
页 数:268
装 帧:平装
ISBN:9787302550518
目录
●第1章研究性能问题1
1.1UnityProfiler2
1.1.1启动Profiler3
1.1.2Profiler窗口7
1.2性能分析的很好方法15
1.2.1验证脚本是否出现16
1.2.2验证脚本次数16
1.2.3验证事件的顺序17
1.2.4最小化正在进行的代码更改18
1.2.5最小化内部影响18
1.2.6最小化外部影响20
1.2.7代码片段的针对性分析20
1.3关于分析的思考25
1.3.1理解Profiler工具26
1.3.2减少干扰26
1.3.3关注问题27
1.4本章小结27
第2章脚本策略29
2.1使用最快的方法获取组件29
2.2移除空的回调定义31
2.3缓存组件引用34
2.4共享计算输出36
2.5Update、Coroutines和InvokeRepeating36
2.6更快的GameObject空引用检查40
2.7避免从GameObject取出字符串属性40
2.8使用合适的数据结构43
2.9避免运行时修改Transform的父节点44
2.10注意缓存Transform的变化44
2.11避免在运行时使用Find()和SendMessage()方法46
2.11.1将引用分配给预先存在的对象49
2.11.2静态类51
2.11.3单例组件54
2.11.4全局消息传递系统58
2.12禁用未使用的脚本和对象69
2.12.1通过可见性禁用对象70
2.12.2通过距离禁用对象71
2.13使用距离平方而不是距离72
2.14最小化反序列化行为73
2.14.1减小序列化对象73
2.14.2异步加载序列化对象74
2.14.3在内存中保存之前加载的序列化对象74
2.14.4将公共数据移入ScriptableObject74
2.15叠加、异步地加载场景74
2.16创建自定义的Update()层76
2.17本章小结80
第3章批处理的优势81
3.1DrawCall82
3.2材质和着色器84
3.3FrameDebugger86
3.4动态批处理88
3.4.1顶点属性89
3.4.2网格缩放91
3.4.3动态批处理总结92
3.5静态批处理93
3.5.1Static标记93
3.5.2内存需求93
3.5.3材质引用94
3.5.4静态批处理的警告94
3.5.5静态批处理总结95
3.6本章小结96
第4章着手处理艺术资源97
4.1音频97
4.1.1导入音频文件98
4.1.2加载音频文件98
4.1.3编码格式与品质级别101
4.1.4音频性能增强103
4.2纹理文件106
4.2.1纹理压缩格式106
4.2.2纹理性能增强108
4.3网格和动画文件116
4.3.1减少多边形数量117
4.3.2调整网格压缩117
4.3.3恰当使用Read-WriteEnabled118
4.3.4考虑烘焙动画118
4.3.5合并网格119
4.4AssetBundle和Resource119
4.5本章小结120
第5章加速物理121
5.1物理引擎的内部工作情况122
5.1.1物理和时间122
5.1.2静态碰撞器和动态碰撞器125
5.1.3碰撞检测126
5.1.4碰撞器类型127
5.1.5碰撞矩阵129
5.1.6Rigidbody激活和休眠状态129
5.1.7射线和对象投射130
5.1.8调试物理130
5.2物理性能优化132
5.2.1场景设置132
5.2.2适当使用静态碰撞器134
5.2.3恰当使用触发体积134
5.2.4优化碰撞矩阵135
5.2.5优选离散碰撞检测136
5.2.6修改固定更新频率137
5.2.7调整允许的优选时间步长138
5.2.8最小化射线发射和边界体积检查139
5.2.9避免复杂的网格碰撞器140
5.2.10避免复杂的物理组件142
5.2.11使物理对象休眠143
5.2.12修改处理器迭代次数144
5.2.13优化布娃娃145
5.2.14确定何时使用物理147
5.3本章小结148
第6章动态图形149
6.1管线渲染150
6.1.1GPU前端151
6.1.2GPU后端152
6.1.3光照和阴影155
6.1.4多线程渲染159
6.1.5低级渲染API159
6.2性能检测问题160
6.2.1分析渲染问题160
6.2.2暴力测试162
6.3渲染性能的增强163
6.3.1启用/禁用GPUSkinning163
6.3.2降低几何复杂度164
6.3.3减少曲面细分164
6.3.4应用GPU实例化164
6.3.5使用基于网格的LOD165
6.3.6使用遮挡剔除167
6.3.7优化粒子系统168
6.3.8优化UnityUI170
6.3.9着色器优化174
6.3.10使用更少的纹理数据181
6.3.11测试不同的GPU纹理压缩格式181
6.3.12最小化纹理交换182
6.3.13VRAM183
6.3.14照明优化184
6.3.15优化移动设备的渲染性能186
6.4本章小结188
第7章虚拟速度和增强加速度189
7.1XR开发190
7.1.1仿真191
7.1.2用户舒适度192
7.2性能增强194
7.2.1物尽其用194
7.2.2单通道立体渲染和多通道立体渲染195
7.2.3应用抗锯齿196
7.2.4优选前向渲染197
7.2.5VR的图像效果197
7.2.6背面剔除197
7.2.7空间化音频198
7.2.8避免摄像机物理碰撞198
7.2.9避免欧拉角198
7.2.10运动约束199
7.2.11跟上近期新发展199
7.3本章小结199
第8章掌握内存管理201
8.1Mono平台202
8.2代码编译209
8.3分析内存210
8.3.1分析内存消耗210
8.3.2分析内存效率211
8.4内存管理性能增强212
8.4.1垃圾回收策略212
8.4.2手动JIT编译213
8.4.3值类型和引用类型214
8.4.4字符串连接221
8.4.5装箱(Boxing)224
8.4.6数据布局的重要性226
8.4.7UnityAPI中的数组227
8.4.8对字典键使用InstanceID227
8.4.9foreach循环228
8.4.10协程229
8.4.11闭包229
8.4.12.NET库函数230
8.4.13临时工作缓冲区231
8.4.14对象池231
8.4.15预制池234
8.4.16IL2CPP优化249
8.4.17WebGL优化249
8.5Unity、Mono和IL2CPP的未来249
8.6本章小结252
第9章提示与技巧253
9.1编辑器热键提示254
9.1.1GameObject254
9.1.2Scene窗口254
9.1.3数组255
9.1.4界面255
9.1.5在编辑器内撰写文档256
9.2编辑器UI提示256
9.2.1脚本执行顺序256
9.2.2编辑器文件256
9.2.3Inspector窗口258
9.2.4Project窗口259
9.2.5Hierarchy窗口260
9.2.6Scene和Game窗口260
9.2.7Play模式262
9.3脚本提示262
9.3.1一般情况262
9.3.2特性263
9.3.3日志264
9.3.4有用的链接264
9.4自定义编辑器脚本和菜单提示265
9.5外部提示266
9.6本章小结268
内容介绍
Unity是一个令人惊叹的游戏开发框架,它包含大量的特性集且易于使用,有助于将一些最炫酷的处理和渲染功能呈现给业余爱好者和专业人士。本书展示了如何使用Unity2017提升游戏性能,并演示高性能不仅局限于预算高的游戏。由于没有什么能比糟糕的用户体验更快地让玩家远离游戏,因此本书首先解释了如何使用Unity Profiler检测问题,学习如何使用秒表、计时器和日志方法诊断问题。接着介绍Unity内置的批处理流程,它们何时能用于提升性能;分析将在运行时使用最小化的空间、CPU和内存导入艺术资源,并发掘一些未充分利用的特性和方法,来管理资源数据。然后深入研究Unity3D引擎的底层,讨论一些只有深入了解其内部工作原理的情况下才能理解的问题。本书最后学习如何适当地组织资源来改进开发工作流,以及如何通过对象池快速有效地实例化资产。使用Unity Profiler查找程序中任何地方的瓶颈,......
(英)克里斯·迪金森(Chris Dickinson) 著 蔡俊鸿,雷鸿飞 译
"Chris Dickinson在英格兰一个安静的小角落里长大,对数学、科学,尤其是电子游戏满怀热情。他喜欢玩游戏并剖析游戏的玩法,并试图确定它们是如何工作的。Chris在获得电子物理学的硕士学位后,他飞到美国加州,在硅谷中心的科学研究领域工作。不久后,他不得不承认,研究工作并不适合他的性格。在四处投简历之后,他找到了一份工作,最终让他走上了软件工程的正确道路(据说,这对于物理学毕业生来说并不罕见)。
Chris是IPBX电话系统的自动化工具开发人员,这段时间的工作更适合他的性格。现在,他正在研究复杂的设备链,帮助开发人员修复和改进这些设备,并开发自己的工具。Chris学习了很多关于如何使用......