操作篇 1
第1章 Unity介绍 1
1.1 Unity简介 2
1.2 Unity的历史 9
1.3 Unity游戏介绍 11
1.4 Unity在严肃游戏领域的应用 13
1.5 软件安装 15
1.5.1 在Windows下的安装 16
1.5.2 在Mac下的安装 20
1.6 购买许可证 23
1.7 Unity相关资源与本书约定 27
1.7.1 Unity相关资源 27
1.7.2 本书约定 27
第2章 Unity编辑器 29
2.1 界面布局 30
2.2 工具栏 32
2.3 菜单栏 34
2.3.1 File(文件)菜单 35
2.3.2 Edit(编辑) 39
2.3.3 Assets(资源) 48
2.3.4 GameObiect(游戏对象/物体) 58
2.3.5 Component(组件) 64
2.3.6 Terrain(地形) 68
2.3.7 Window(窗口) 72
2.3.8 Help(帮助) 73
2.4 Project(项目)视图 73
2.4.1 视图简介 73
2.4.2 视图操作 74
2.5 Hierarchy(层级)视图 76
2.5.1 视图简介 76
2.5.2 视图操作 77
2.6 Inspector(检视)视图 77
2.6.1 视图简介 77
2.6.2 基本属性 78
2.7 Game(游戏)视图 80
2.7.1 视图简介 80
2.7.2 视图控制 80
2.8 Scene(场景)视图 81
2.8.1 视图简介 81
2.8.2 视图控制 83
2.9 Profiler(分析器)视图 85
2.10 Console(控制台)视图 86
2.11 界面定制 87
2.11.1 Unity编辑器布局设置介绍 87
2.11.2 Unity编辑界面色彩设置介绍 88
第3章 资源导入流程 89
3.1 3D模型、材质与动画的导入 90
3.1.1 主流三维软件简介 90
3.1.2 模型、材质以及动画导入前的设置、准备工作 94
3.1.3 将模型、材质、动画导入到Unity中 107
3.2 图片资源的导入 119
3.2.1 Unity所支持的图片格式以及尺寸要求 120
3.2.2 图片资源导入后的设置 120
3.2.3 图片资源类型的设定 123
3.3 音频、视频的导入 128
3.3.1 Unity支持的音频、视频格式 128
3.3.2 音频资源的导入 129
3.3.3 视频资源的导入 131
3.4 创建Prefab 132
3.4.1 Prefab的概念 132
3.4.2 Prefab的创建以及相关操作说明 133
3.4.3 Prefab的应用案例 136
3.5 Unity Asset Store资源商店 141
3.5.1 Asset Store简介 141
3.5.2 Asset Store的使用方法 142
第4章 创建基本游戏场景 147
4.1 创建工程和游戏场景 148
4.2 创建基本几何体 150
4.2.1 基本几何体简介 151
4.2.2 创建基本几何体 151
4.3 创建组件 152
4.3.1 组件的含义及其作用 152
4.3.2 如何添加组件 153
4.3.3 组件类型介绍 155
4.3.4 为游戏对象增加组件 160
4.4 创建脚本 167
4.4.1 Unity支持的脚本类型 167
4.4.2 创建脚本的方式 168
4.4.3 脚本资源包概述 170
4.4.4 自定义新建脚本的模板内容 174
4.5 创建光源 176
4.5.1 Unity的光源类型 176
4.5.2 光源属性讲解 177
4.5.3 光源场景案例 182
4.6 创建摄像机 185
4.6.1 摄像机类型 186
4.6.2 摄影机参数 187
4.6.3 摄影机案例 189
4.7 地形编辑器 192
4.7.1 地形编辑器概述 192
4.7.2 地形的创建方式以及 193
相关参数设定 193
4.7.3 地形编辑器参数讲解案例 206
4.8 创建角色 217
4.8.1 角色控制资源包概述 217
4.8.2 在场景中使用角色控制预设体 218
4.9 粒子系统 221
4.9.1 粒子系统简介 221
4.9.2 粒子资源包的概述 222
4.9.3 粒子系统参数讲解 223
4.10 天空盒 234
4.10.1 天空盒资源包的概述 235
4.10.2 天空盒的两种应用方式及其区别 239
4.10.3 创建天空盒的方法 242
4.11 雾效 246
4.11.1 雾效的添加方法 246
4.11.2 雾效的参数讲解 246
4.12 水效果 247
4.12.1 水资源包的概述 247
4.12.2 水效果的创建实例 252
4.13 音效 254
4.13.1 添加音效 254
4.13.2 音效设置 259
第5章 Shuriken粒子系统 261
5.1 Shuriken粒子系统概述 262
5.2 Shuriken粒子系统的控制面板 263
5.3 Shuriken粒子系统的参数讲解 267
5.4 粒子系统案例 295
第6章 Mecanim动画系统 305
6.1 Mecanim概述 306
6.1.1 Mecanim工作流 306
6.1.2 旧版动画系统 307
6.2 资源的准备和导入 307
6.2.1 如何获取人形网格模型 307
6.2.2 如何导入动画 308
6.2.3 动画分解 309
6.3 使用人形角色动画 310
6.3.1 创建Avatar 311
6.3.2 配置Avatar 312
6.3.3 设置Muscle参数 313
6.3.4 Avatar Body Mask 315
6.3.5 人形动画的重定向 316
6.3.6 逆向运动学功能(Pro only) 319
6.3.7 一般动画 321
6.4 在游戏中使用角色动画 321
6.4.1 循环动画片段 322
6 4.2 Animator组件 322
6.4.3 Animator Controller 323
6.4.4 动画状态机 323
6.4.5 混合树 327
6.4.6 1D混合 327
6.4.7 2D混合 328
6.5 案例分析 329
第7章 物理引擎 339
7.1 Rigidbody:刚体 340
7.2 Colliders:碰撞体 342
7.2.1 碰撞体型介绍 343
7.2.2 碰撞体相关的知识点介绍 347
7.3 Character Controller:角色控制器 349
7.4 布料 351
7.4.1 Interactive Cloth:交互布料 351
7.4.2 Skinned Cloth:蒙皮布料 353
7.4.3 Cloth Renderer:布料渲染器 355
7.5 关节 356
7.5.1 Hinge Joint:铰链关节 356
7.5.2 Fixed Joint:固定关节 358
7.5.3 Spring Joint:弹簧关节 359
7.5.4 Character Joint:角色关节 361
7.5.5 Configurable Joint:可配置关节 363
7.6 力场 368
7.7 物理引擎实例 369
第8章 光照贴图技术 387
8.1 概述 388
8.2 烘焙Lightmap的简单示例 388
8.3 烘焙相关的参数详解 391
8.4 三种Lightmapping方式的比较 396
8.5 Light Probes 399
8.5.1 Light Probes概述 399
8.5.2 Light Probes使用示例 399
8.5.3 Light Probes应用细节 402
第9章 导航网格寻路 405
9.1 概述 406
9.2 导航网格寻路系统简单示例 406
9.3 导航网格寻路系统相关参数详解 411
9.4 进阶使用 413
9.4.1 使用Off-Mesh Link组件 413
9.4.2 为网格分层 415
9.4.3 动态更改可行进层 417
9.4.4 使用Navmesh Obstacle组件 418
第10章 遮挡剔除技术 421
10.1 概述 422
10.2 使用遮挡剔除 422
10.3 设置烘焙参数 424
10.4 使用Occlusion Area组件 425
10.5 使用Occlusion Portals组件 426
第11章 后期屏幕渲染特效 427
11.1 后期屏幕渲染特效的作用 428
11.2 后期屏幕渲染特效资源包概述 428
11.3 后期屏幕渲染特效参数详解及效果展示 430
11.4 后期屏幕渲染特效展示 450
开发篇 459
第12章 游戏开发基础知识 459
12.1 3D数学基础知识 460
12.1.1 向量 460
12.1.2 矩阵 465
12.1.3 齐次坐标 466
12.2 四元数 466
12.3 渲染管线 472
12.4 常见游戏类型 473
12.4.1 按游戏方式分类 473
12.4.2 按游戏运行平台划分 481
第13章 Unity脚本开发基础 483
13.1 脚本介绍 484
13.2 Unity脚本语言 485
13.3 Javascript基本语法 485
13.3.1 变量 486
13.3.2 数组 486
13.3.3 运算、比较、逻辑操作符 488
13.3.4 语句 489
13.3.5 函数 491
13.3.6 JavaScript脚本 492
13.4 C#基本语法 493
13.4.1 变量 493
13.4.2 数组 493
13.4.3 运算、比较、逻辑操作符 495
13.4.4 语句 495
13.4.5 函数 495
13.4.6 C#脚本 497
13.5 Boo基本语法 498
13.5.1 变量 498
13.5.2 数组 499
13.5.3 运算、比较、逻辑操作符 499
13.5.4 语句 499
13.5.5 函数 503
13.5.6 Boo脚本 504
13.6 创建脚本 504
13.6.1 MonoDevelop编辑器 505
13.6.2 脚本必然事件(Certain Event) 506
13.6.3 MonoBehaviour类 508
13.6.4 访问组件 509
13.6.5 访问游戏对象 511
13.7 常用脚本API 512
13.7.1 Transform组件 512
13.7.2 Time类 514
13.7.3 Random类 514
13.7.4 Mathf类 515
13.7.5 Coroutine协同程序 515
第14章 输入与控制 519
14.1 Input类方法和变量 520
14.2 鼠标输入 521
14.3 键盘输入 523
14.4 游戏外设输入 525
14.5 移动设备输入 526
14.6 自定义输入 528
第15章 GUI开发 529
15.1 Unity GUI介绍 530
15.2 GUI控件 530
15.2.1 Label控件 532
15.2.2 Box控件 533
15.2.3 Button控件 534
15.2.4 RepeatButton控件 535
15.2.5 TextField控件 536
15.2.6 PasswordField控件 537
15.2.7 TextArea控件 538
15.2.8 Toggle控件 539
15.2.9 ToolBar控件 540
15.2.10 Slider控件 541
15.2.11 Scrollbar控件 542
15.2.12 ScrollView控件 543
15.2.13 Window窗口 545
15.3 GUISkin控件样式 546
15.4 GUILayout自动布局 548
15.4.1 区域Area 549
15.4.2 水平组和垂直组 550
15.4.3 GUILayout参数 551
15.5 GUI应用实例 552
第16章 Shader开发 565
16.1 内建Shader介绍 566
16.2 Unity里的三种自定义Shader 569
16.3 创建Shader 570
16.4 ShaderLab基础语法 571
16.4.1 Properties属性 572
16.4.2 SubShader子着色器视图 574
16.4.3 Pass 574
16.4.4 备用着色器Fallback 575
16.4.5 Category分类 576
16.5 固定功能管线着色器(Fixed Function Shaders) 576
16.6 表面着色器(Surface Shaders) 577
16.7 顶点片段着色器(Vertex And Fragment Shaders) 582
第17章 开发进阶 587
17.1 Batching技术 588
17.1.1 Draw Call Batching使用与限制 588
17.1.2 Static Batching(静态批处理) 589
17.1.3 Dynamic Batching(动态批处理) 589
17.2 基于Unity的网络解决方案 590
17.2.1 授权服务器 590
17.2.2 非授权服务器 591
17.2.3 Network View(网络视图组件) 592
17.3 多人网络游戏案例 593
17.4 编辑器扩展 635
17.4.1 编辑器脚本介绍 636
17.4.2 创建编辑器窗口 636
17.4.3 自定义Inspector视图 638
17.4.4 自定义场景视图 639
17.4.5 第三方编辑器插件 640
第18章 工作流程 641
18.1 AssetBundle 643
18.1.1 BuildPipeline.BuildAsset-Bundle 643
18.1.2 BuildPipeline.BuildStreamed-SceneAssetBundle 644
18.1.3 BuildPipeline.BuildAsset-BundleExplicitAssetNames 644
18.1.4 BuildAssetBundleOptions选项 644
18.1.5 如何创建AssetBundle之间的依赖 645
18.2 如何下载AssetBundle 646
18.3 AssetBundle的加载与卸载 647
18.3.1 如何加载AssetBundle 647
18.3.2 如何从AssetBundle中加载Assets 649
18.3.3 如何从场景AssetBundle中加载Assets 650
18.3.4 如何卸载AssetBundle 651
18.4 AssetBundle的内存管理 651
18.4.1 下载和加载AssetBundle时对内存的影响 652
18.4.2 AssetBundle以及Asset的卸载 653
18.5 WWW、AssetBundle及Asset的关系 653
第19章 脚本调试与优化 655
19.1 脚本调试 656
19.2 Profiler 661
19.2.1 Profiler的使用 661
19.2.2 IOS设备启用远程分析 671
19.2.3 Android设备的远程分析 672
19.3 优化建议 672
19.3.1 各个平台通用的优化方案 672
19.3.2 移动设备的优化 674
第20章 跨平台发布 677
20.1 发布到网页平台 678
20.1.1 如何将项目发布到Web 678
20.1.2 自定义Unity Web Player的屏幕加载 685
20.1.3 自定义Unity Web Player的行为 688
20.1.4 JavaScript与Unity的通信 689
20.2 发布到Android平台 690
20.2.1 Java SDK的环境配置 690
20.2.2 Android SDK的安装与项目发布 691
20.3 iOS平台的发布 696
20.3.1 发布前的准备工作 697
20.3.2 发布iOS平台的设置 698
20.3.3 项目工程输出与发布 702
第21章 经典案例分析之Angrybots 703
21.1 资源准备 704
21.1.1 静态3D资源(无动画)导出 704
21.1.2 动态3D资源导出 706
21.2 导入资源到项目工程 708
21.3 角色分析 709
21.4 自定义复活位置 712
21.5 角色射击 715
21.6 碰撞检测 717
21.7 自定义路径曲线 718
21.8 降雨效果 720
21.9 静态批处理 723
21.10 相机屏幕的后处理特效 724
21.10.1 地面反射特效 724
21.10.2 Bloom特效 725
21.10.3 景深特效(Depth of Field) 725
21.10.4 色彩噪声特效 725
21.11 Profile游戏分析器 726