Unity Shader入门精要+Unity 3D游戏开发 D2版+游戏AI程序设计实战 | ||
![]() | 定价 | 237.90 |
出版社 | 人民邮电出版社 | |
版次 | ||
出版时间 | 2019年04月 | |
开本 | 16开 | |
作者 | ||
装帧 | 平装-胶订 | |
页数 | ||
字数 | ||
ISBN编码 | 9787115500045 |
本书分为10章,用实战的方式讲解AI在游戏开发中的应用。主要内容包括:AI的基本概念、游戏中常用的寻路算法、Unity的基本知识、有限状态机、行为树、AI插件Behavior Designer、遗传算法、足球AI的实现、游戏AI设计的扩展技术等。本书适合游戏开发者、程序员阅读。
Unity 是一款市场占有率FC高的商业游戏引擎,横跨25 个主流游戏平台。本书基于Unity 2018,结合2D 游戏开发和3D 游戏开发的案例,详细介绍了它的方方面面,内容涉及编辑器、游戏脚本、UGUI 游戏界面、动画系统、持久化数据、静态对象、多媒体、资源加载与优化、自动化与打包等。本书适合初学者或者有一定基础的开发者阅读。
本书不仅要教会读者如何使用Unity Shader,更重要的是要帮助读者学习Unity中的一些渲染机制以及如何使用Unity Shader实现各种自定义的渲染效果,希望这本书可以为读者打开一扇新的大门,让读者离制作心目中杰出游戏的心愿更近一步。 本书的主要内容为:D 1章讲解了学习Unity Shader应该从哪里着手;D 2章讲解了现代GPU是如何实现整个渲染流水线的,这对理解Shader的工作原理有着FC重要的作用;D3章讲解Unity Shader的实现原理和基本语法;D4章学习Shader所需的数学知识,帮助读者克服学习Unity Shader时遇到的数学障碍;D5章通过实现一个简单的1;CY=CY点/片元着色器案例,讲解常用的辅助技巧等;D6章学习如何在Shader中实现基本的光照模型;D7章讲述了如何在Unity Shader中使用法线纹理、遮罩纹理等基础纹理;D8章学习如何实现透明度测试和透明度混合等透明效果;D9章讲解复杂的光照实现;D 10章讲解在Unity Shader中使用立方体纹理、渲染纹理和程序纹理等高 级纹理;D 11章学习用Shader实现纹理动画、1;CY=CY点动画等动态效果;D 12章讲解了屏幕后处理效果的屏幕TX;D 13章使用深度纹理和法线纹理实现更多屏幕TX;D 14章讲解非真实感渲染的算法,如卡通渲染、素描风格的渲染等;D 15章讲解噪声在游戏渲染中的应用;D 16章介绍了常见的优化技巧;D 17章介绍用表面着色器实现渲染;D 18章讲解基于物理渲染的技术;D 19章讲解在升级Unity 5时可能出现的问题,并给出解决方法;D 20章介绍许多FC有价值的学习资料,以帮助读者进行更深入的学习。 本书适合Unity初学者、游戏开 发者、程序员,也可以作为大专院校相关专业师生的学习用书,以及培训学校的培训教材。
目 录
D 1章 游戏AI概述 1
1.1 AI是什么 1
1.2 为什么在游戏里使用AI 2
1.3 如何在游戏中实现AI 3
1.4 AIJ在我们身边 4
D 2章 游戏中的寻路算法 6
2.1 寻路算法 6
2.2 为什么需要图 6
2.3 地图的简化 8
2.4 BFS算法 9
2.4.1 BFS算法简介 10
2.4.2 BFS算法的实现 11
2.5 DFS算法 15
2.5.1 DFS算法的示例 15
2.5.2 DFS算法的实现 17
2.6 启发式搜索算法 20
2.6.1 启发式搜索算法简介 21
2.6.2 启发式搜索算法的示例 21
2.6.3 启发式搜索算法的实现 23
2.6.4 H(M)估算函数 28
D3章 Unity 31
3.1 Unity简介 32
3.2 Unity的应用 33
3.3 自定义编辑器的实现 35
D4章 有限状态机 42
4.1 有限状态机及其实现 42
4.1.1 有限状态机简介 43
4.1.2 有限状态机的示例 43
4.1.3 单层状态机的实现 47
4.2 分层有限状态机及其实现 53
4.2.1 分层有限状态机简介 54
4.2.2 分层有限状态机的示例 54
4.2.3 分层有限状态机的实现 54
D5章 行为树 73
5.1 行为树简介 74
5.2 行为树的实现 75
5.2.1 组合节点 77
5.2.2 装饰节点 90
5.2.3 条件节点 91
5.2.4 行为节点 91
5.3 行为树的示例 92
5.3.1 选择节点 92
5.3.2 顺序节点 96
5.3.3 并行节点 97
D6章 AI插件Behavior Designer 99
6.1 AI插件Behavior Designer简介 99
6.2 AI插件Behavior Designer的安装 101
6.3 选择节点 102
6.4 顺序节点和条件节点 107
D7章 机器学习算法——遗传算法 113
7.1 遗传算法的生物学知识 113
7.2 遗传算法简介 114
7.3 遗传算法的流程图 114
7.4 遗传算法的应用示例 115
7.5 轮盘选择算法 119
7.6 交叉操作 121
7.7 变异操作 123
7.8 示例中遗传算法的实现 124
7.9 遗传算法的应用 137
D8章 足球AI的实现 138
8.1 寻路AI策略 138
8.2 巡逻AI策略 145
8.3 踢球AI策略 153
8.4 进攻AI策略 159
8.5 防守AI策略 164
8.6 守门员的AI策略 170
8.7 组合AI 180
D9章 游戏AI设计的扩展技术 184
9.1 视野 184
9.2 听觉 187
9.3 语言 188
9.4 行为 189
9.5 Unity与TensorFlow的组合 189
D 10章 进阶之路 192
10.1 游戏AI相关wz 192
10.2 SJ那么大 193
D 1篇 基础篇
D 1章 欢迎来到Shader的SJ 2
1.1 程序员的三大浪漫 2
1.2 本书结构 3
D 2章 渲染流水线 5
2.1 综述 5
2.1.1 什么是流水线 5
2.1.2 什么是渲染流水线 6
2.2 CPU和GPU之间的通信 7
2.2.1 把数据加载到显存中 7
2.2.2 设置渲染状态 8
2.2.3 调用Draw Call 8
2.3 GPU流水线 9
2.3.1 概述 9
2.3.2 1;CY=CY点着色器 10
2.3.3 裁剪 11
2.3.4 屏幕映射 11
2.3.5 三角形设置 12
2.3.6 三角形遍历 13
2.3.7 片元着色器 13
2.3.8 逐片元操作 14
2.3.9 z结 17
2.4 一些容易困惑的地方 18
2.4.1 什么是OpenGL/DirectX 18
2.4.2 什么是HLSL、GLSL、CG 19
2.4.3 什么是Draw Call 20
2.4.4 什么是固定管线渲染 22
2.5 那么,你明白什么是Shader了吗 23
2.6 扩展阅读 23
D3章 Unity Shader基础 24
3.1 Unity Shader概述 25
3.1.1 一对好兄弟:材质和Unity Shader 25
3.1.2 Unity中的材质 26
3.1.3 Unity中的Shader 26
3.2 Unity Shader的基础:ShaderLab 28
3.3 Unity Shader的结构 29
3.3.1 给我们的Shader起个名字 29
3.3.2 材质和Unity Shader的桥梁:Properties 29
3.3.3 重量级成员:SubShader 31
3.3.4 留一条后路:Fallback 33
3.3.5 ShaderLab还有其他的
语义吗 33
3.4 Unity Shader的形式 33
3.4.1 Unity的宠儿:表面着色器 34
3.4.2 **聪明的孩子:1;CY=CY点/片元着
色器 35
3.4.3 被抛弃的角落:固定函数着
色器 35
3.4.4 选择哪种Unity Shader形式 36
3.5 本书使用的Unity Shader形式 36
3.6 答疑解惑 36
3.6.1 Unity Shader != 真正的Shader 36
3.6.2 Unity Shader和CG/HLSL之间的关系 37
3.6.3 我可以使用GLSL来写吗 38
3.7 扩展阅读 38
D4章 学习Shader所需的数学基础 39
4.1 背景:农场游戏 39
4.2 笛卡儿坐标系 40
4.2.1 二维笛卡儿坐标系 40
4.2.2 三维笛卡儿坐标系 41
4.2.3 左手坐标系和右手坐标系 42
4.2.4 Unity使用的坐标系 44
4.2.5 练习题 45
4.3 点和矢量 45
4.3.1 点和矢量的区别 46
4.3.2 矢量运算 47
4.3.3 练习题 53
4.4 矩阵 54
4.4.1 矩阵的定义 54
4.4.2 和矢量联系起来 55
4.4.3 矩阵运算 55
4.4.4 特殊的矩阵 57
4.4.5 行矩阵还是列矩阵 60
4.4.6 练习题 61
4.5 矩阵的几何意义:变换 62
4.5.1 什么是变换 62
4.5.2 齐次坐标 63
4.5.3 分解基础变换矩阵 63
4.5.4 平移矩阵 64
4.5.5 缩放矩阵 64
4.5.6 旋转矩阵 65
4.5.7 复合变换 66
4.6 坐标空间 67
4.6.1 为什么要使用这么多不同的坐标空间 68
4.6.2 坐标空间的变换 68
4.6.3 1;CY=CY点的坐标空间变换过程 72
4.6.4 模型空间 73
4.6.5 SJ空间 73
4.6.6 观察空间 75
4.6.7 裁剪空间 77
4.6.8 屏幕空间 83
4.6.9 z结 85
4.7 法线变换 86
4.8 Unity Shader的内置变量(数学篇) 87
4.8.1 变换矩阵 87
4.8.2 摄像机和屏幕参数 88
4.9 答疑解惑 89
4.9.1 使用3×3还是4×4的
变换矩阵 89
4.9.2 CG中的矢量和矩阵类型 89
4.9.3 Unity中的屏幕坐标:ComputeScreenPos/VPOS/
WPOS 90
4.10 扩展阅读 93
4.11 练习题答案 93
D 2篇 初级篇
D5章 开始Unity Shader学习之旅 100
5.1 本书使用的软件和环境 100
5.2 一个**简单的1;CY=CY点/片元着色器 100
5.2.1 1;CY=CY点/片元着色器的基本
结构 101
5.2.2 模型数据从哪里来 103
5.2.3 1;CY=CY点着色器和片元着色器之间如何通信 104
5.2.4 如何使用属性 105
5.3 强大的援手:Unity提供的内置文件和变量 107
5.3.1 内置的包含文件 107
5.3.2 内置的变量 109
5.4 Unity提供的CG/HLSL语义 109
5.4.1 什么是语义 109
5.4.2 Unity支持的语义 110
5.4.3 如何定义复杂的变量类型 110
5.5 程序员的烦恼:Debug 111
5.5.1 使用假彩色图像 111
5.5.2 利用神 器:Visual Studio 113
5.5.3 **新利器:帧调试器 113
5.6 小心:渲染平台的差异 115
5.6.1 渲染纹理的坐标差异 115
5.6.2 Shader的语法差异 116
5.6.3 Shader的语义差异 117
5.6.4 其他平台差异 117
5.7 Shader整洁之道 117
5.7.1 float、half还是fixed 117
5.7.2 规范语法 118
5.7.3 避免不 要的计算 118
5.7.4 慎用分支和循环语句 119
5.7.5 不要除以0 119
5.8 扩展阅读 120
D6章 Unity中的基础光照 121
6.1 我们是如何看到这个SJ的 121
6.1.1 光源 121
6.1.2 吸收和散射 122
6.1.3 着色 122
6.1.4 BRDF光照模型 123
6.2 标准光照模型 123
6.2.1 环境光 123
6.2.2 自发光 124
6.2.3 漫反射 124
6.2.4 高光反射 124
6.2.5 逐像素还是逐1;CY=CY点 125
6.2.6 z结 125
6.3 Unity中的环境光和自发光 126
6.4 在Unity Shader中实现漫反射光照
模型 126
6.4.1 实践:逐1;CY=CY点光照 126
6.4.2 实践:逐像素光照 129
6.4.3 半兰伯特模型 130
6.5 在Unity Shader中实现高光反射
光照模型 131
6.5.1 实践:逐1;CY=CY点光照 132
6.5.2 实践:逐像素光照 134
6.5.3 Blinn-Phong光照模型 135
6.6 召唤神龙:使用Unity内置的
函数 136
D7章 基础纹理 139
7.1 单张纹理 140
7.1.1 实践 140
7.1.2 纹理的属性 142
7.2 凹凸映射 146
7.2.1 高度纹理 146
7.2.2 法线纹理 146
7.2.3 实践 148
7.2.4 Unity中的法线纹理类型 154
7.3 渐变纹理 155
7.4 遮罩纹理 158
7.4.1 实践 159
7.4.2 其他遮罩纹理 161
D8章 透明效果 162
8.1 为什么渲染顺序很重要 163
8.2 Unity Shader的渲染顺序 164
8.3 透明度测试 165
8.4 透明度混合 169
8.5 开启深度写入的半透明效果 171
8.6 ShaderLab的混合命令 173
8.6.1 混合等式和参数 173
8.6.2 混合操作 174
8.6.3 常见的混合类型 175
8.7 双面渲染的透明效果 176
8.7.1 透明度测试的双面渲染 176
8.7.2 透明度混合的双面渲染 176
D3篇 中级篇
D9章 更复杂的光照 180
9.1 Unity的渲染路径 180
9.1.1 前向渲染路径 182
9.1.2 1;CY=CY点照明渲染路径 185
9.1.3 延迟渲染路径 186
9.1.4 选择哪种渲染路径 188
9.2 Unity的光源类型 188
9.2.1 光源类型有什么影响 189
9.2.2 在前向渲染中处理不同的
光源类型 190
9.3 Unity的光照衰减 195
9.3.1 用于光照衰减的纹理 196
9.3.2 使用数学公式计算衰减 196
9.4 Unity的阴影 196
9.4.1 阴影是如何实现的 197
9.4.2 不透明物体的阴影 198
9.4.3 使用帧调试器查看阴影绘制过程 202
9.4.4 统一管理光照衰减和阴影 204
9.4.5 透明度物体的阴影 206
9.5 本书使用的标准Unity Shader 209
D 10章 高 级纹理 210
10.1 立方体纹理 210
10.1.1 天空盒子 210
10.1.2 创建用于环境映射的立方体
纹理 212
10.1.3 反射 213
10.1.4 折射 215
10.1.5 菲涅耳反射 217
10.2 渲染纹理 219
10.2.1 镜子效果 219
10.2.2 玻璃效果 220
10.2.3 渲染纹理 vs. GrabPass 224
10.3 程序纹理 225
10.3.1 在Unity中实现简单的程序
纹理 225
10.3.2 Unity的程序材质 228
D 11章 让画面动起来 230
11.1 Unity Shader中的内置变量
(时间篇) 230
11.2 纹理动画 230
11.2.1 序列帧动画 230
11.2.2 滚动的背景 233
11.3 1;CY=CY点动画 234
11.3.1 流动的河流 234
11.3.2 广告牌 236
11.3.3 注意事项 239
D4篇 高 级篇
D 12章 屏幕后处理效果 244
12.1 建立一个基本的屏幕后处理脚本
系统 244
12.2 调整屏幕的亮度、饱和度和
对比度 246
12.3 边缘检测 249
12.3.1 什么是卷积 249
12.3.2 常见的边缘检测算子 249
12.3.3 实现 250
12.4 高斯模糊 253
12.4.1 高斯滤波 253
12.4.2 实现 254
12.5 Bloom效果 259
12.6 运动模糊 263
12.7 扩展阅读 266
D 13章 使用深度和法线纹理 267
13.1 获取深度和法线纹理 267
13.1.1 背后的原理 267
13.1.2 如何获取 269
13.1.3 查看深度和法线纹理 271
13.2 再谈运动模糊 272
13.3 全局雾效 276
13.3.1 重建SJ坐标 276
13.3.2 雾的计算 278
13.3.3 实现 278
13.4 再谈边缘检测 283
13.5 扩展阅读 287
D 14章 非真实感渲染 288
14.1 卡通风格的渲染 288
14.1.1 渲染轮廓线 288
14.1.2 添加高光 289
14.1.3 实现 290
14.2 素描风格的渲染 293
14.3 扩展阅读 296
14.4 参考文献 297
D 15章 使用噪声 298
15.1 消融效果 298
15.2 水波效果 302
15.3 再谈全局雾效 305
15.4 扩展阅读 309
15.5 参考文献 309
D 16章 Unity中的渲染优化技术 310
16.1 移动平台的特点 310
16.2 影响性能的因素 311
16.3 Unity中的渲染分析工具 312
16.3.1 认识Unity 5的渲染统计
窗口 312
16.3.2 性能分析器的渲染区域 313
16.3.3 再谈帧调试器 313
16.3.4 其他性能分析工具 314
16.4 减少draw call数目 314
16.4.1 动态批处理 315
16.4.2 静态批处理 316
16.4.3 共享材质 318
16.4.4 批处理的注意事项 318
16.5 减少需要处理的1;CY=CY点数目 319
16.5.1 优化几何体 319
16.5.2 模型的LOD技术 319
16.5.3 遮挡剔除技术 320
16.6 减少需要处理的片元数目 320
16.6.1 控制绘制顺序 320
16.6.2 时刻警惕透明物体 321
16.6.3 减少实时光照和阴影 321
16.7 节省带宽 322
16.7.1 减少纹理大小 322
16.7.2 利用分辨率缩放 323
16.8 减少计算复杂度 323
16.8.1 Shader的LOD技术 323
16.8.2 代码方面的优化 323
16.8.3 根据硬件条件进行缩放 324
16.9 扩展阅读 324
D5篇 扩展篇
D 17章 Unity的表面着色器探秘 328
17.1 表面着色器的一个例子 328
17.2 编译指令 330
17.2.1 表面函数 330
17.2.2 光照函数 330
17.2.3 其他可选参数 331
17.3 两个结构体 332
17.3.1 数据来源:Input结构体 332
17.3.2 表面属性:SurfaceOutput
结构体 333
17.4 Unity背后做了什么 334
17.5 表面着色器实例分析 336
17.6 Surface Shader的缺点 341
D 18章 基于物理的渲染 342
18.1 PBS的理论和数学基础 342
18.1.1 光是什么 343
18.1.2 双向反射分布函数
(BRDF) 344
18.1.3 漫反射项 345
18.1.4 高光反射项 346
18.1.5 Unity中的PBS实现 347
18.2 Unity 5的Standard Shader 348
18.2.1 它们是如何实现的 348
18.2.2 如何使用Standard Shader 349
18.3 一个更加复杂的例子 352
18.3.1 设置光照环境 352
18.3.2 放置反射探针 355
18.3.3 调整材质 356
18.3.4 线性空间 356
18.4 答疑解惑 357
18.4.1 什么是全局光照 357
18.4.2 什么是伽马校正 358
18.4.3 什么是HDR 361
18.4.4 那么,PBS适合什么样的
游戏 362
18.5 扩展阅读 363
18.6 参考文献 363
D 19章 Unity 5更新了什么 365
19.1 场景“更亮了” 365
19.2 表面着色器更容易“报错了” 365
19.3 D家做主:自己控制非统一缩放的
网格 366
19.4 固定管线着色器逐渐退出舞台 366
D 20章 还有更多内容吗 368
20.1 如果你想深入了解渲染的话 368
20.2 SJ那么大 369
20.3 参考文献 369
D 1章 基础知识 1
1.1 Unity简介 1
1.2 跨平台与多工种协作 1
1.3 Unity版本 2
1.4 Unity内置资源或拓展资源 3
1.5 示例项目打包与发布 5
1.6 Unity服务 7
1.7 小结 8
D 2章 编辑器的结构 9
2.1 游戏项目 9
2.1.1 创建项目 9
2.1.2 打开项目 10
2.1.3 版本管理 10
2.1.4 安装多个版本的Unity 11
2.2 Project视图 12
2.2.1 创建资源 12
2.2.2 搜索资源 13
2.2.3 搜索标签 14
2.3 Hierarchy视图 16
2.3.1 创建游戏对象 16
2.3.2 搜索游戏对象 16
2.4 Inspector视图 17
2.4.1 标题栏 17
2.4.2 组件栏 18
2.5 Scene视图 19
2.5.1 导航栏 19
2.5.2 标题栏 20
2.5.3 坐标系控制器 21
2.5.4 视图预览 21
2.6 Game视图 22
2.6.1 标题栏 22
2.6.2 视图预览 23
2.7 导航栏视图 23
2.8 其他功能 25
2.8.1 小锁头 25
2.8.2 窗口菜单 25
2.8.3 保存组件参数 26
2.8.4 Package Manager 26
2.9 小结 27
D3章 拓展编辑器 28
3.1 拓展Project视图 28
3.1.1 拓展右键菜单 28
3.1.2 创建菜单 30
3.1.3 拓展布局 31
3.1.4 监听事件 32
3.2 拓展Hierarchy视图 33
3.2.1 拓展菜单 33
3.2.2 拓展布局 34
3.2.3 重写菜单 35
3.3 拓展Inspector视图 37
3.3.1 拓展源生组件 38
3.3.2 拓展继承组件 38
3.3.3 组件不可编辑 40
3.3.4 Context菜单 42
3.4 拓展Scene视图 44
3.4.1 辅助元素 44
3.4.2 辅助UI 45
3.4.3 常驻辅助UI 46
3.4.4 禁用选中对象 47
3.5 拓展Game视图 48
3.6 MenuItem菜单 49
3.6.1 覆盖系统菜单 50
3.6.2 自定义菜单 50
3.6.3 源生自定义菜单 51
3.6.4 拓展全局自定义快捷键 52
3.7 面板拓展 53
3.7.1 Inspector面板 53
3.7.2 EditorWindows窗口 55
3.7.3 EditorWindows下拉菜单 56
3.7.4 预览窗口 57
3.7.5 获取预览信息 59
3.8 Unity编辑器的源码 60
3.8.1 查看DLL 60
3.8.2 清空控制台日志 61
3.8.3 获取EditorStyles样式 63
3.8.4 获取内置图标样式 64
3.8.5 拓展默认面板 66
3.8.6 例子:查找ManagedStaticReferences()静态引用 67
3.8.7 UIElements 69
3.8.8 查询系统窗口 71
3.8.9 自定义资源导入类型 73
3.9 小结 74
D4章 游戏脚本 75
4.1 创建脚本 75
4.1.1 脚本模板 75
4.1.2 拓展脚本模板 76
4.2 脚本的生命周期 78
4.2.1 脚本绑定事件 80
4.2.2 脚本初始化和销毁 80
4.2.3 脚本更新与协程任务 82
4.2.4 停止协程任务 83
4.2.5 使用OnGUI显示FPS 84
4.3 多脚本管理 85
4.3.1 脚本的执行顺序 85
4.3.2 多脚本优化 86
4.4 脚本序列化 86
4.4.1 查看数据 87
4.4.2 私有序列化数据 88
4.4.3 serializedObject 90
4.4.4 监听部分元素修改事件 91
4.4.5 序列化/反序列化监听 92
4.4.6 ScriptableObject 95
4.4.7 脚本的Attributes特性 97
4.4.8 单例脚本 99
4.4.9 定时器 100
4.4.10 CustomYieldInstruction 101
4.4.11 工作线程 103
4.5 脚本编译 104
4.5.1 编译规则 105
4.5.2 优化编译 105
4.5.3 编译DLL 105
4.5.4 脚本跨平台 106
4.5.5 程序集定义 106
4.5.6 日志 107
4.6 脚本调试 109
4.7 小结 111
D5章 UGUI游戏界面 112
5.1 基础元素 112
5.1.1 Text 112
5.1.2 描边和阴影 113
5.1.3 动态字体 113
5.1.4 字体花屏 114
5.1.5 Image组件 115
5.1.6 Raw Image组件 116
5.1.7 Button组件 116
5.1.8 Toggle组件 117
5.1.9 Slider组件 118
5.1.10 Scrollbar & ScrollView组件 119
5.1.11 使用ScrollRect组件制作游戏摇杆 120
5.2 事件系统 121
5.2.1 UI事件 122
5.2.2 UI事件管理 124
5.2.3 UnityAction和UnityEvent 126
5.2.4 RaycastTarget优化 128
5.2.5 渗透UI事件 129
5.2.6 例子——新手引导聚合动画 131
5.3 Canvas组件 135
5.3.1 自适应屏幕 135
5.3.2 锚点对齐方式 137
5.3.3 背景图全屏 138
5.3.4 布局组件 139
5.3.5 Canvas优化 139
5.4 Atlas 139
5.4.1 创建Atlas 139
5.4.2 读取Atlas 140
5.4.3 Variant 141
5.4.4 多图集管理 142
5.5 UGUI实例 142
5.5.1 置灰 142
5.5.2 粒子TX与UI的排序 145
5.5.3 Mask & RectMask2D裁切 147
5.5.4 粒子的裁切 148
5.5.5 粒子自适应 152
5.5.6 滑动列表嵌套 154
5.5.7 UI模板嵌套 156
5.5.8 UITX与界面分离 157
5.5.9 输入事件 161
5.5.10 按钮不规则点击区域 162
5.5.11 更换默认Shader 164
5.5.12 小地图优化 164
5.5.13 查看UGUI源码 165
5.6 小结 165
D6章 2D游戏开发 166
6.1 Sprite 166
6.1.1 2D摄像机与分辨率自适应 167
6.1.2 Sprite Renderer排序 169
6.1.3 裁切 170
6.2 Sprite动画 171
6.2.1 创建2D动画 171
6.2.2 2D动画控制器 173
6.3 Tile地图 176
6.3.1 创建Tile 176
6.3.2 Tile Palette 178
6.3.3 编辑Tile 178
6.3.4 多Tile编辑与排序 179
6.3.5 拓展Tile Palette 180
6.3.6 拓展Tile 183
6.3.7 更新Tile 184
6.4 2D碰撞检测 186
6.4.1 Collider 2D 186
6.4.2 Rigidbody 2D 187
6.4.3 碰撞事件 189
6.4.4 碰撞方向 191
6.4.5 触发器监听 193
6.4.6 Effectors 2D 193
6.4.7 优化 194
6.4.8 计算区域 194
6.5 小结 195
D7章 动画系统 196
7.1 模型 196
7.1.1 Mesh Filter 196
7.1.2 Mesh Renderer 197
7.1.3 Prefab 197
7.2 动画编辑器 198
7.2.1 编辑器面板 198
7.2.2 在编辑器中添加事件 199
7.3 导入类动画 200
7.3.1 人形重定向动画 200
7.3.2 通用动画 202
7.3.3 老版动画 203
7.3.4 导入类动画事件 203
7.4 动画控制器 203
7.4.1 系统状态 204
7.4.2 切换条件 205
7.4.3 状态机脚本 206
7.4.4 IK动画 207
7.4.5 Root Motion 209
7.4.6 Avatar Mask 210
7.4.7 层 211
7.4.8 Blend Tree 212
7.4.9 非运行播放动画 213
7.4.10 Animator Override Controller 214
7.4.11 RuntimeAnimator-
Controller 215
7.5 TimeLine编辑器 215
7.5.1 创建Timeline 216
7.5.2 Activation Track 217
7.5.3 Animation Track 217
7.5.4 Audio Track 218
7.5.5 Control Track 218
7.5.6 Playable Track 219
7.5.7 自定义 Track 221
7.6 Playables 222
7.6.1 播放动画 222
7.6.2 动画混合 224
7.6.3 音频混合 225
7.6.4 自定义脚本 226
7.7 Constraint 227
7.7.1 Aim Constraint 227
7.7.2 Parent Constraint 228
7.7.3 脚本控制约束 229
7.8 小结 229
D8章 持久化数据 230
8.1 Excel 230
8.1.1 EPPlus 230
8.1.2 读取Excel 230
8.1.3 写入Excel 232
8.1.4 JSON 233
8.1.5 JSON支持字典 235
8.2 文件读取与写入 236
8.2.1 PlayerPrefs 237
8.2.2 EditorPrefs 237
8.2.3 PlayerPrefs保存复杂结构 238
8.2.4 TextAsset 239
8.2.5 读写文本 240
8.2.6 运行期读写文本 240
8.2.7 PersistentDataPath目录 242
8.2.8 游戏存档 243
8.3 XML 247
8.3.1 创建XML 247
8.3.2 读取与修改 248
8.3.3 XML文件 249
8.4 YAML 251
8.4.1 YamlDotNet 252
8.4.2 序列化和反序列化 252
8.4.3 读取配置 253
8.5 小结 255
D9章 静态对象 256
9.1 Lightmap 256
9.1.1 设置烘焙贴图 256
9.1.2 实时光和焙贴光共存 258
9.1.3 灯光管理 258
9.1.4 运行时更换烘焙贴图 258
9.1.5 动态更换游戏对象 260
9.1.6 复制游戏对象 262
9.2 遮挡剔除 263
9.2.1 遮挡与被遮挡 264
9.2.2 遮挡与被遮挡事件 265
9.2.3 动态剔除 267
9.2.4 自定义遮挡剔除 267
9.3 Batching(静态合批) 268
9.3.1 设置静态合批 268
9.3.2 脚本静态合批 269
9.3.3 动态合批 269
9.3.4 静态合批的隐患 270
9.4 寻路网格 270
9.4.1 设置寻路 270
9.4.2 连接两点 272
9.4.3 获取寻路路径 272
9.4.4 动态阻挡 274
9.4.5 导出寻路网格信息 274
9.5 反射探头 277
9.6 小结 278
D 10章 多媒体 279
10.1 音频 279
10.1.1 音频文件 279
10.1.2 Audio Source 280
10.1.3 3D音频 280
10.1.4 代码控制播放 281
10.1.5 混音区 283
10.1.6 Audio Mixer 284
10.1.7 录音 284
10.1.8 声音进度 285
10.2 视频 287
10.2.1 视频文件 287
10.2.2 视频渲染模式 287
10.2.3 视频自适应 288
10.2.4 UI盖在视频之上 289
10.2.5 视频渲染在材质上 290
10.2.6 视频Render Texture 291
10.2.7 播放工程外视频 291
10.2.8 自定义视频显示 293
10.2.9 视频进度 293
10.3 小结 294
D 11章 资源加载与优化 295
11.1 编辑模式 295
11.1.1 加载资源 295
11.1.2 实例化Prefab 296
11.1.3 创建Prefab 297
11.1.4 更新Prefab 298
11.1.5 卸载资源 299
11.1.6 游戏对象与资源的关系 299
11.2 版本管理 300
11.2.1 .meta文件 300
11.2.2 多工程 301
11.2.3 同步文件 302
11.2.4 SVN外链 303
11.3 运行模式 304
11.3.1 引用资源 304
11.3.2 Resources 305
11.3.3 删除对象 306
11.3.4 删除资源 306
11.3.5 GC 307
11.4 AssetBundle 308
11.4.1 设置AssetBundle 308
11.4.2 依赖关系 310
11.4.3 通过脚本设置依赖关系 311
11.4.4 压缩格式 311
11.4.5 加载包体内的AssetBundle 312
11.4.6 下载AssetBundle 313
11.4.7 加载场景 314
11.4.8 卸载AssetBundle 315
11.5 游戏对象 315
11.5.1 创建游戏对象 316
11.5.2 Transform设置排序 316
11.5.3 删除节点 317
11.5.4 获取游戏对象 317
11.5.5 管理游戏组件 318
11.6 优化工具 319
11.6.1 重复无用资源 319
11.6.2 查看内存 321
11.6.3 查看CPU效率 321
11.6.4 自定义观察区间 322
11.6.5 Profiler信息的导出与导入 323
11.6.6 Frame Debugger 324
11.7 资源管理实例 325
11.7.1 特殊内置的文件夹 325
11.7.2 隐藏文件夹 326
11.7.3 Resources与AssetBundle
无缝切换 326
11.7.4 资源加载策略 329
11.7.5 资源更新 329
11.7.6 资源引用关系 329
11.7.7 系统资源修改 332
11.7.8 AssetBundle里的脚本 333
11.7.9 热更新代码 334
11.8 小结 335
D 12章 自动化与打包 336
12.1 资源导入 336
12.1.1 监听导入事件 336
12.1.2 自动设置贴图压缩格式 337
12.1.3 自动设置模型 339
12.1.4 禁止模型生成材质文件 340
12.1.5 删除移动资源事件 341
12.1.6 选择性自动设置 342
12.1.7 主动设置 342
12.1.8 待保存状态 343
12.1.9 自动执行MenuItem 344
12.2 配置错误 345
12.2.1 主动检查工具 345
12.2.2 被动检查工具 346
12.2.3 导出类检查工具 346
12.2.4 导出UI 346
12.2.5 生成UI代码 347
12.2.6 导出模型 351
12.2.7 不参与保存对象 352
12.2.8 导出场景 353
12.2.9 过滤无用场景 355
12.3 自动打包 356
12.3.1 打包前后事件 356
12.3.2 打包后自动压缩 357
12.3.3 用C# 调用shell脚本 359
12.3.4 等待shell结束 359
12.3.5 shell脚本调用C# 360
12.3.6 shell脚本自动打包 362
12.3.7 CD解放程序员的双手 365
12.4 自动构建图集与压缩 366
12.4.1 UI图集的压缩 366
12.4.2 非UI图集压缩 370
12.5 小结 371
D 13章 3D游戏开发 372
13.1 Shader 372
13.1.1 固定渲染管线 372
13.1.2 可编程渲染管线 375
13.1.3 可编程渲染管线的表面着色器 378
13.1.4 深度排序 379
13.1.5 透明 381
13.1.6 裁切 382
13.1.7 着色器变体采集 383
13.2 摄像机 384
13.2.1 3D坐标转换屏幕坐标 384
13.2.2 3D坐标转换UI坐标 385
13.2.3 主摄像机 387
13.2.4 在UI上显示模型 387
13.2.5 Render Texture 389
13.2.6 在Render Texture上显示带TX的模型 390
13.2.7 LOD Group 392
13.3 场景管理 393
13.3.1 切换场景 393
13.3.2 DontDestroyOnLoad 393
13.3.3 异步加载场景以及进度 393
13.3.4 多场景 395
13.3.5 多场景游戏对象管理 396
13.3.6 场景切换事件 397
13.3.7 多场景烘焙 398
13.4 输入事件 398
13.4.1 全局事件 398
13.4.2 射线 399
13.4.3 点选3D模型 400
13.4.4 通过点击控制人物移动 402
13.5 物理碰撞 403
13.5.1 碰撞器 404
13.5.2 角色控制器 404
13.5.3 碰撞区域 405
13.5.4 碰撞检测 406
13.5.5 碰撞触发器 407
13.5.6 物理调试器 408
13.6 实战技巧 409
13.6.1 3D头1;CY=CY文字 409
13.6.2 图文混排 410
13.6.3 图片数字 410
13.6.4 游戏对象缓存池 412
13.6.5 游戏资源缓存池 414
13.6.6 运行时合并网格 414
13.6.7 运行时合并贴图 416
13.7 小结 419
本书按照知识点循序渐进,对Unity中各个类型的Shader都进行了详细系统的阐述。通过大量实例及配图进行讲解。而且游戏中很多常用画面效果以及Unity 5.x相关的新内容都有涉及。相信读者通过阅读本书,对Shader的运用会更加娴熟。 —— 罗盛誉(风宇冲) Unity是一款上手容易但是想做好却很难的引擎,尤其是Shader部分,所有的渲染效果都离不开它。Unity虽然帮开发者封装了很多通用的Shader,但是往往还是满足不了策划的需求。所以开发者太需要对Shade进行系统的学习,那么本书是目前 佳的参考资料。 —— UnityZS开发者宣雨松MOMO
揭示AI在游戏开发中应用的经典图书,以实战的方式阐述AI的概念、AI插件、足球AI的实现、游戏AI设计的扩展技术
畅销的unity游戏开发教程图书 基于Unity 2018全新升级 Unity User Group意见LX经典之作 张鑫、高川、崇慕、杨博、陈小飞、窦玉波、张宏亮、郭智、郭振平等众多大神倾力推荐
拥有百万博客访问量作者写作 Unity5.x从入门到精通3D游戏开发 业界专家鼎力推荐的一本填补了Unity Shader和渲染流水线之间的知识鸿沟