第1章Unity基础以及开发环境的搭建 1
1.1Unity基础知识概览 1
1.1.1初识Unity 1
1.1.2Unity的诞生及发展 1
1.1.3Unity广阔的市场前景 2
1.1.4独具特色的Unity 3
1.2Unity开发环境的搭建 7
1.2.1Windows平台下Unity的下载
及安装 7
1.2.2MacOS平台下Unity的下载
及安装 11
1.2.3目标平台的SDK与Unity
集成 14
1.3第一个Unity程序 17
1.4本书案例的导入及运行 21
1.5本章小结 25
第2章Unity集成开发环境详解 27
2.1Unity集成开发环境的整体布局 27
2.1.1Unity集成开发环境的整体
布局 27
2.1.2菜单栏 28
2.1.3工具栏 28
2.1.4场景设计面板 29
2.1.5游戏预览面板 32
2.1.6游戏组成对象列表 33
2.1.7项目资源列表 34
2.1.8属性查看器 35
2.1.9状态栏与控制台 35
2.1.10动画视图 36
2.1.11动画控制器编辑视图 36
2.2菜单栏 37
2.2.1文件(File) 37
2.2.2编辑(Edit) 40
2.2.3资源(Assets) 46
2.2.4游戏对象(GameObject) 52
2.2.5组件(Component) 55
2.2.6窗口(Window) 60
2.2.7帮助(Help) 65
2.3本章小结 70
第3章Unity脚本程序开发 71
3.1Unity脚本概述 71
3.2Unity中C#脚本的注意事项 71
3.2.1继承自MonoBehaviour类 72
3.2.2类名字必须匹配文件名 72
3.2.3使用Awake或Start方法初
始化 72
3.2.4Unity脚本中协同程序有不同的语法规则 72
3.2.5只有满足特定情况变量才能显示在属性查看器中 72
3.2.6尽量避免使用构造函数 72
3.2.7调试 72
3.3Unity脚本的基础语法 73
3.3.1常用操作 73
3.3.2记录时间 74
3.3.3访问游戏对象组件 75
3.3.4访问其他游戏对象 76
3.3.5向量 78
3.3.6成员变量和静态成员变量 79
3.3.7实例化游戏对象 80
3.3.8协同程序和中断 80
3.3.9一些重要的类 81
3.3.10性能优化 85
3.3.11脚本编译 86
3.4综合案例 86
3.4.1案例策划及准备工作 87
3.4.2创建项目及场景搭建 87
3.4.3飞机控制脚本实现 89
3.4.4摄像机跟随脚本实现 92
3.5本章小结 93
第4章Unity3D图形用户界面基础 95
4.1GUI图形用户界面系统 95
4.1.1图形用户界面组件的变量 95
4.1.2图形用户界面中的常用控件 102
4.1.3图形用户界面控件综合案例 125
4.2UGUI图形用户界面系统 127
4.2.1创建UGUI控件 127
4.2.2Canvas画布 128
4.2.3EventSystem 129
4.2.4RectTransform组件 130
4.2.5Panel控件 130
4.2.6Button控件 131
4.2.7Text控件 134
4.2.8Image控件 135
4.2.9RawImage控件 135
4.2.10Slider控件 136
4.2.11Scrollbar控件 137
4.2.12Toggle控件 138
4.2.13InputField控件 139
4.2.14UGUI布局管理的使用及相
关组件介绍 140
4.2.15UGUI中不规则形状的按钮
的碰撞检测 142
4.2.16ScrollView的制作 143
4.2.17UGUI综合案例—音乐播
放器的UI搭建 145
4.3预制件(prefab)资源的应用 153
4.3.1预制件(prefab)资源的
创建 153
4.3.2通过prefab资源进而实例化
对象 154
4.4常用的输入对象 155
4.4.1Touch输入对象 155
4.4.2Input输入对象 157
4.5与销毁相关的方法 161
4.5.1Object.Destroy方法 162
4.5.2NetWork.Destroy方法 162
4.5.3MonoBehaviour.OnDestroy
方法 163
4.6本章小结 163
第5章Unity3D第三方2D
组件库—NGUI 165
5.1初识NGUI 165
5.1.1NGUI背景概述 165
5.1.2NGUI的导入 165
5.1.3UI层简介 166
5.2NGUI菜单介绍 167
5.2.1“Selection”菜单 168
5.2.2“Create”菜单 168
5.2.3“Attach”菜单 168
5.2.4“Tween”菜单 173
5.2.5“Open”菜单 173
5.2.6其他菜单 175
5.3控件工具的使用 176
5.3.1图片精灵—Sprite 176
5.3.2文本标签—Label 177
5.3.3图片精灵—Texture 179
5.3.4组件容器—Widget 180
5.3.5锚点—Anchor 182
5.3.6面板—Panel 183
5.3.7滚动视图—ScrollView 184
5.3.8网格—Grid 186
5.3.9表格—Table 187
5.4UI库中默认组件的制作 187
5.4.1按钮—ColoredButton 187
5.4.2复选框—ColoredCheckbox 189
5.4.3水平滚动条—ColoredHorizontalScrollBar 192
5.4.4滑块—ColoredSlider 194
5.4.5弹出列表—ColoredPopupList 197
5.4.6输入框—Control-SimpleInputField 199
5.5杂项 200
5.5.1Atlas图集制作 200
5.5.2中文字体制作 202
5.5.3动画曲线编辑 203
5.6一个NGUI的综合案例 204
5.6.1界面一制作 204
5.6.2界面二制作 207
5.6.3界面三制作 210
5.7本章小结 212
第6章物理引擎 213
6.1刚体 213
6.1.1刚体特性 213
6.1.2物理管理器 219
6.2碰撞器 221
6.2.1碰撞器的添加 222
6.2.2碰撞过滤 225
6.2.3物理材质 228
6.3粒子系统 229
6.3.1粒子系统的简介 229
6.3.2粒子系统的特性 230
6.3.3粒子系统的综合使用 238
6.4关节 243
6.4.1铰链关节的特性 243
6.4.2铰链关节的创建 244
6.4.3固定关节的特性 245
6.4.4固定关节的创建 245
6.4.5弹簧关节的特性 246
6.4.6弹簧关节的创建 247
6.4.7角色关节的特性 247
6.4.8角色关节的创建 248
6.4.9可配置关节的特性 249
6.4.10可配置关节的创建 250
6.4.11关节综合案例—机械手 251
6.5交通工具 256
6.5.1车轮碰撞器添加 256
6.5.2车轮碰撞器的特性 257
6.5.3车轮碰撞器的应用 258
6.6布料 262
6.6.1蒙皮网格 263
6.6.2布料特性 263
6.6.3布料的简单案例 264
6.7力场 265
6.7.1力场组件特性 265
6.7.2力场综合案例 266
6.8物理引擎在动画系统中的使用 267
6.8.1场景的搭建 267
6.8.2脚本的开发 270
6.8.3运行效果 271
6.9物理引擎综合案例 271
6.9.1场景的搭建 271
6.9.2界面的搭建 277
6.9.3脚本的开发 277
6.9.4案例开发总结 280
6.10本章小结 280
第7章着色器—Shader 281
7.1初识着色器 281
7.1.1着色器概述 281
7.1.2ShaderLab语法基础 282
7.1.3着色器中涉及的各种空间
概念 287
7.2着色器的3种形态 289
7.2.1固定管线着色器 289
7.2.2顶点片元着色器 290
7.2.3表面着色器 294
7.3表面着色器 295
7.3.1表面着色器基础知识 296
7.3.2通过表面着色器实现体
积雾 300
7.4渲染通道的通用指令 305
7.4.1设置LOD数值 305
7.4.2渲染队列 307
7.4.3混合模式介绍 309
7.4.4Alpha测试 310
7.4.5深度测试 312
7.4.6通道遮罩 314
7.4.7面的剔除操作 315
7.4.8抓屏操作 317
7.5着色器的组织和优化 318
7.5.1着色器的组织和复用 319
7.5.2移动平台上的优化 322
7.6综合案例 324
7.6.1案例策划及准备工作 325
7.6.2创建项目及场景搭建 326
7.6.3着色器及相关脚本的开发 327
7.6.4结点对象的创建及相关脚本
的开发 332
7.7本章小结 335
第8章3D游戏开发的常用技术 337
8.1天空盒的应用 337
8.1.1Unity天空盒资源 337
8.1.2开发实际需要的天空盒 339
8.23D拾取技术 340
8.3视频贴图 343
8.3.1基础知识 343
8.3.2视频贴图案例 343
8.4动态字体 346
8.5重力加速度传感器 347
8.6PlayerPrefs类 349
8.7虚拟按钮与摇杆的使用 350
8.7.1下载并导入标准资源包 351
8.7.2虚拟按钮和摇杆使用的
案例 351
8.8声音 353
8.8.1声音类型 353
8.8.2音频管理器—AudioManager 354
8.8.3音频监听器—AudioListener 354
8.8.4音频源—AudioSource 355
8.8.5音频效果—AudioEffects 357
8.8.6音频混响区—AudioReverbZones 360
8.8.7简单的声音控制案例 361
8.8.8混音器—AudioMixer 362
8.9水特效 367
8.9.1基础知识 367
8.9.2案例 368
8.10雾特效 370
8.10.1案例效果与基本原理 370
8.10.2场景搭建及开发步骤 370
8.11本章小结 373
第9章光影效果的使用 375
9.1光源 375
9.1.1点光源(PointLight) 375
9.1.2定向光源
(DirectionalLight) 377
9.1.3聚光灯光源(SpotLight) 377
9.1.4区域光光源(AreaLight) 378
9.1.5发光材质 378
9.2光照贴图的烘焙与使用 379
9.2.1对场景进行光照烘焙 379
9.2.2光照烘焙参数详解 380
9.3法线贴图 383
9.3.1在Unity中使用法线贴图 383
9.3.2如何在3DMax中制作法线
贴图 386
9.4镜子的开发 387
9.4.1场景的搭建 388
9.4.2镜面着色器的开发 391
9.4.3C#脚本的开发 391
9.5真实的水面效果开发 394
9.5.1基本原理 394
9.5.2场景的搭建 395
9.5.3C#脚本的开发 396
9.5.4镜面着色器的开发 399
9.6Unity3D光照系统中的高级功能 401
9.6.1渲染路径与颜色空间 401
9.6.2Cookies 402
9.6.3Flare镜头光晕 403
9.6.4CullingMask光照过滤 404
9.6.5阴影的设置 404
9.6.6LightProbes光探头 406
9.7Unity3D5.0中新增的光照功能
详解 408
9.7.1基于物理学的标准着色器 408
9.7.2反射探头(ReflectionProbe) 411
9.7.3全局光照技术详解 415
第10章模型与动画 419
10.13D模型导入 419
10.1.1主流3D建模软件的介绍 419
10.1.2Unity与建模软件单位的比
例关系 420
10.1.3将3D模型导入Unity 421
10.2网格Mesh 422
10.2.1网格过滤器(MeshFilter) 422
10.2.2Mesh属性和方法介绍 423
10.2.3Mesh的使用 423
10.2.4使用Mesh使物体变形的一
个简单案例 424
10.3第三方切割工具库ShatterToolkit
的使用 429
10.3.1ShatterToolkit简介 429
10.3.2使用ShatterToolkit的一个简单案例 430
10.4旧版动画系统 438
10.4.1导入角色动画资源 438
10.4.2动画控制器(Animation) 439
10.4.3动画脚本 440
10.4.4使用旧版动画系统的简单
案例 441
10.5Mecanim动画系统 444
10.5.1角色动画的配置 444
10.5.2动画控制器的创建 447
10.5.3动画控制器的配置 448
10.5.4角色动画的重定向 451
10.5.5角色动画的混合—创建动
画混合树 453
10.5.6角色动画的混合—混合类
型介绍 455
10.5.7Mecanim中的代码控制 456
10.5.8案例分析 461
10.6本章小结 464
第11章地形与寻路技术 465
11.1地形引擎 465
11.1.1地形的创建 465
11.1.2灰度图的使用 469
11.2拖尾渲染器—TrailRenderer 471
11.2.1背景介绍 471
11.2.2拖尾渲染器属性介绍 471
11.2.3拖尾渲染器的使用 472
11.2.4产生汽车轮胎拖痕案例 472
11.2.5产生汽车刹车痕案例 474
11.3自动寻路技术 476
11.3.1基础知识 476
11.3.2一个简单的案例 477
11.4本章小结 481
第12章游戏资源更新 483
12.1AssetBundle资源包 483
12.1.1AssetBundle简介 483
12.1.2创建AssetBundle 483
12.1.3AssetBundle的下载 486
12.1.4AssetBundle的加载和
卸载 488
12.1.5关于AssetBundle 489
12.1.6本节小结 491
12.2Lua热更新 491
12.2.1热更新的基本介绍 491
12.2.2Lua的基本情况介绍 491
12.2.3SimpleFramework框架
介绍 492
12.2.4热更新案例 493
12.2.5本节小结 498
12.3本章小结 498
第13章多线程技术与网络开发 499
13.1多线程技术 499
13.1.1基本知识 499
13.1.2多线程技术用于大量
计算 501
13.1.3多线程技术在网络开发中的
应用 503
13.2WWW类 506
13.2.1用WWW类访问网络
资源 506
13.2.2场景搭建 506
13.2.3C#脚本的编写 507
13.3网络类—Network 507
13.3.1静态变量 507
13.3.2静态方法 510
13.3.3消息发送 515
13.4基于UnityNetwork开发网络
游戏 516
13.4.1非授权服务器和授权
服务器 516
13.4.2NetworkView网络视图
组件 517
13.4.3案例的效果预览 517
13.4.4案例场景的搭建 517
13.4.5项目主体脚本的开发 520
13.4.6服务器和客户端的发布 525
13.5基于Socket开发Unity网络游戏 525
13.5.1网络游戏架构简介 526
13.5.2案例的效果预览与资源
准备 527
13.5.3案例场景的搭建 528
13.5.4服务器端的开发 531
13.5.5客户端的开发 532
13.6本章小结 540
第14章Unity2D游戏开发 541
14.1Unity2D基础介绍 541
14.1.1Unity2D项目的创建 541
14.1.2Unity2D功能简要介绍 542
14.1.3Unity2D游戏开发工作流程
的简要介绍 542
14.2Unity2D核心功能对象—Sprite 543
14.2.1Sprite对象的创建和基本
用法 543
14.2.2换帧动画的制作 544
14.2.3制作换帧动画的具体步骤 545
14.3Unity2D中的物理引擎 549
14.3.12D刚体 549
14.3.22D碰撞器 552
14.3.32D关节 554
14.3.4使用2D物理引擎制作撞冰
块案例 557
14.4一个完整的2D游戏案例 563
14.4.1游戏玩法以及功能概述 563
14.4.2游戏的策划及准备工作 564
14.4.3游戏的架构 565
14.4.4菜单场景 566
14.4.5游戏场景 568
14.5本章小结 574
第15章常用性能优化技术 575
15.1程序性能的分析 575
15.1.1Profiler使用方法 575
15.1.2Profiler的参数说明 576
15.2代码的断点调试 578
15.2.1通过MonoDevelop调试 578
15.2.2MicrosoftVisualStudioToolsforUnity的使用 579
15.3优化事项 580
15.3.1遮挡剔除技术 581
15.3.2批处理技术 582
15.3.3移动平台的优化技巧 582
15.4本章小结 583
第16章综合案例—指间足球 585
16.1背景以及功能概述 585
16.1.1游戏背景概述 585
16.1.2游戏功能简介 585
16.2游戏的策划及准备工作 587
16.2.1游戏的策划 587
16.2.2使用Unity开发游戏前的准
备工作 587
16.3游戏的架构 590
16.3.1各个场景的简要介绍 590
16.3.2游戏架构简介 591
16.4游戏主场景 592
16.4.1场景搭建 592
16.4.2主摄像机设置及脚本开发 596
16.4.3守门员游戏对象相关脚本
开发 602
16.4.4检测板游戏对象相关脚本
开发 603
16.4.5提示板游戏对象相关脚本的开发 605
16.4.6门框游戏对象相关脚本的
开发 606
16.4.7其他脚本的开发 607
16.5游戏界面的开发 611
16.5.1主菜单界面的搭建 611
16.5.2主菜单界面监听脚本的
开发 615
16.5.3游戏界面的搭建 621
16.5.4游戏界面监听脚本的开发 622
16.5.5游戏暂停界面监听脚本的
开发 625
16.6游戏的优化与改进 626