# Unity 自学与进阶必会目录
2017-02-06 13:57
197 查看
六本书
Unity 5权威讲解
Unity 3D NGUI 实战教程
Unity 5实战 使用C和Unity开发多平台游戏
Unity 3D人工智能编程
Unity官方案例精讲
Unity Shader入门精要
第1章 Unity 5简介 1
1.1 Unity 3D游戏引擎的诞生 2
1.2 Unity 5的优势 2
1.2.1 支持多平台 2
1.2.2 集成开发环境 3
1.2.3 所有功能免费 4
1.2.4 中间件内建 5
1.2.5 开放社区 5
1.2.6 资源商店 6
1.3 使用Unity制作的游戏 7
1.4 下载Unity 9
1.4.1 安装Unity 10
1.4.2 选择Unity许可 11
1.4.3 注册并登录Unity 12
1.5 Unity界面 13
1.5.1 视图 16
1.5.2 工具栏 27
1.5.3 设置快捷键 34
1.6 小结 34
第2章 准备游戏开发 35
2.1 开发的游戏以及开发顺序 36
2.2 新建项目 36
2.3 设置Unity IDE 37
2.4 系统管理项目视图 39
2.5 导入角色模型 39
2.6 创建资源商店账号 42
2.7 从项目视图访问资源商店 44
2.8 从资源商店下载资源 45
2.9 小结 48
第3章 制作游戏场景 49
3.1 3D模型 50
3.2 纹理 51
3.3 材质 53
3.4 应用纹理 54
3.5 着色器以及基于物理的着色 58
3.5.1 渲染模式 59
3.5.2 反照率 59
3.5.3 金属 59
3.5.4 法线贴图 59
3.5.5 高度图 60
3.5.6 遮挡贴图 60
3.5.7 放射 61
3.5.8 细节遮蔽 61
3.6 表现地面阴影——使用法线贴图 61
3.7 预设 62
3.8 用预设制作墙体 64
3.9 光照 68
3.9.1 平行光 68
3.9.2 点光源 69
3.9.3 聚光灯 69
3.9.4 区域光 70
3.10 天空的表现方法 71
3.10.1 六面天空盒 72
3.10.2 程序天空盒 74
3.10.3 立方图天空盒 76
3.11 小结 76
第4章 制作主人公角色 77
4.1 空游戏对象 78
4.2 导入3D模型并设置选项 79
4.3 组件 80
4.4 生成脚本 81
4.5 下载键盘输入值 84
4.6 角色移动 87
4.6.1 处理组件缓存 88
4.6.2 游戏对象的移动 89
4.6.3 Translate函数 90
4.7 单位向量 91
4.8 角色旋转:Rotate 94
4.9 摄像机追踪:Follow Cam 95
4.10 Legacy动画系统 98
4.11 动画片段 99
4.12 动画控件 104
4.13 动画合成 107
4.14 实时阴影 108
4.15 运用投影器制作阴影 111
4.16 运用平面网格制作阴影 115
4.17 小结 117
第5章 制作子弹发射效果 119
5.1 准备子弹模型 120
5.2 Rigidbody组件 121
5.3 设置物理引擎属性:Physics Manager 124
5.4 Collider组件 125
5.4.1 Box Collider 125
5.4.2 Sphere Collider 125
5.4.3 Capsule Collider 126
5.4.4 Mesh Collider 126
5.4.5 Wheel Collider 127
5.4.6 Terrain Collider 128
5.5 碰撞感知条件 128
5.6 碰撞事件 130
5.7 Tag应用 132
5.8 子弹发射逻辑 135
5.9 制作子弹发射轨迹:Trail Renderer 140
5.10 应用粒子系统 145
5.11 制作爆炸效果并设置爆炸威力 150
5.12 随机使用纹理 155
5.13 声音:AudioSource与AudioListener 157
5.14 枪口火焰效果:Muzzle Flash 164
5.15 小结 170
第6章 制作敌对角色 171
6.1 Mecanim动画系统 172
6.2 导入怪兽3D模型 173
6.3 转换为Mecanim动画 173
6.4 动画控制器 177
6.5 导航:怪兽追击例程 183
6.5.1 生成导航网格并烘焙 184
6.5.2 Nav Mesh Agent 185
6.6 实现人工智能 188
6.7 怪兽攻击例程 197
6.8 怪兽被袭时的反应 199
6.9 血迹效果 203
6.10 贴图:地面上的血迹效果 206
6.11 赋予怪兽攻击技能 211
6.12 特定层之间的碰撞感知 215
6.13 优化Mecanim动画角色的骨骼结构 218
6.14 怪兽停止攻击:Tag 220
6.15 怪兽停止攻击:Delegate、Event 224
6.16 怪兽的死亡处理 228
6.17 小结 235
第7章 Unity UI 237
7.1 Canvas对象 238
7.1.1 EventSystem对象 239
7.1.2 Canvas组件 240
7.2 Rect Transform组件 244
7.3 anchoredPosition属性 252
7.4 Image组件 254
7.4.1 Simple 256
7.4.2 Sliced 256
7.4.3 Tiled 258
7.4.4 Filed 258
7.5 RawImage 组件 259
7.6 Button组件 260
7.7 Text组件 271
7.8 Scroll Rect组件 272
7.8.1 Content属性 275
7.8.2 Mask组件 276
7.9 制作游戏分数UI 277
7.10 制作生命条 285
7.11 小结 289
第8章 游戏管理器 291
8.1 怪兽出现逻辑 292
8.2 访问游戏管理器 296
8.3 单例模式 298
8.4 对象池 300
8.5 共享函数:声音处理 308
8.6 小结 311
第9章 灵活运用射线投射 313
9.1 射线投射 314
9.2 油桶爆炸 319
9.3 实现激光束 322
第10章 导航仪高级技巧 329
10.1 动态障碍物 330
10.2 分离网格链接 333
10.3 用户自定义生成分离网格链接 335
第11章 光照贴图、灯光探测器 337
11.1 光照 338
11.1.1 Generate Lightmap UVs 选项 338
11.1.2 Lightmap Static标记 338
11.1.3 光照视图 339
11.1.4 准备烘焙光照的过程 341
11.1.5 Auto选项 342
11.1.6 构建光照贴图 342
11.1.7 Area Light 345
11.2 灯光探测器 346
11.2.1 Light Probe Group 347
11.2.2 Anchor Override 350
11.3 小结 351
第12章 场景分离与合并 353
12.1 场景分离 354
12.2 场景合并 357
第13章 Unity内置网络游戏 361
13.1 网络游戏的定义 362
13.2 网络游戏的物理结构 362
13.3 网络通信协议 363
13.4 Unity内置网络功能 363
13.4.1 网络视图 364
13.4.2 状态同步 364
13.4.3 远程过程调用 365
13.5 Unity网络游戏步骤 366
13.5.1 游戏服务器初始化 366
13.5.2 客户端游戏连接 367
13.5.3 各游戏端点之间的通信 368
13.6 开发网络游戏 368
13.6.1 生成并初始化项目 369
13.6.2 场景制作 369
13.6.3 制作Player 371
13.6.4 Character Controller移动逻辑 371
13.6.5 制作网络管理器 373
13.6.6 构建可执行文件 374
13.6.7 查看连接网络的用户数量 377
13.6.8 制作网络玩家 380
13.6.9 摄像机追踪逻辑 383
13.6.10 平滑的同步处理(OnSerializeNetworkView) 387
13.6.11 发射例程(调用RPC) 392
13.6.12 动画同步 399
13.6.13 探测子弹的碰撞 405
13.6.14 死亡和复活处理 406
13.6.15 终止连接的相关处理 414
13.7 小结 415
第14章 使用Photon Cloud制作网络游戏 417
14.1 第二代Unity网络游戏引擎UNET 418
14.2 第三方网络游戏引擎 418
14.3 PhotonNetwork游戏引擎 418
14.3.1 Photon Server与Photon Cloud 419
14.3.2 加入会员 419
14.4 制作坦克大战游戏 421
14.4.1 坦克移动逻辑 422
14.4.2 履带动画 424
14.4.3 设置摄像机追踪逻辑与摄像机位置 427
14.4.4 旋转炮塔 428
14.4.5 调整炮身角度 431
14.4.6 建立炮弹预设和发射逻辑 432
14.4.7 炮弹发射音效 438
14.5 安装Photon Unity Networking插件 439
14.6 将坦克游戏更改为Photon Cloud版本 441
14.6.1 连接Photon Cloud 442
14.6.2 随机配对 444
14.6.3 制作房间 445
14.6.4 Photon View 447
14.6.5 动态生成坦克 448
14.6.6 构建游戏并测试连接 451
14.6.7 控制自己的坦克 453
14.6.8 平滑移动和旋转处理 454
14.6.9 同步炮塔与炮身 458
14.6.10 发射炮弹 463
14.6.11 坦克被击中时的处理及复活 465
14.7 制作游戏大厅 469
14.7.1 制作大厅场景 469
14.7.2 制作登录UI 471
14.7.3 进入游戏房间 479
14.7.4 制作坦克HUD 484
14.7.5 创建并进入房间 492
14.7.6 构建房间目录UI 497
14.7.7 接收房间列表 504
14.7.8 动态增加按钮事件 516
14.8 战地细节功能 520
14.8.1 显示房间内的玩家数 520
14.8.2 退出房间 523
14.8.3 显示连接日志 525
14.8.4 事件钩子 530
14.9 评分并显示 534
14.10 在Unity中连接数据库 547
14.10.1 JSON 547
14.10.2 SimpleJSON 549
14.10.3 将分数信息保存到数据库 551
14.10.4 从数据库获取排名信息 554
14.11 小结 557
第15章 提升游戏真实感 559
15.1 布娃娃系统 560
15.1.1 创建项目并下载资源 560
15.1.2 制作舞台 561
15.1.3 生成3D模型的布娃娃系统 562
15.2 触屏 571
15.2.1 ScreenPointToRay函数 571
15.2.2 Touch类 574
15.2.3 Unity Remote4 577
15.3 通过触屏移动 579
15.4 小结 582
附录 数据库 583
1.数据库和数据库管理系统 584
2.数据库服务器 584
3. SQL 584
4. DBMS的数据管理 584
5.数据表 585
6.列与行 585
7. SQL 586
1.1 游戏UI开发介绍
1.1.1 什么是游戏UI
1.1.2 UI为何如此重要
1.1.3 UI开发的流程
1.1.4 UI开发的难点
1.2 什么是NGUI
1.2.1 NGUI插件介绍
1.2.2 NGUI的强大优势
第2章 NGUI基础
2.1 导入NGUI插件
2.1.1 NGUI版本介绍
2.1.2 NGUI的下载和购买
2.1.3 导入NGUI插件应用
2.1.4 导入常见问题
2.2 认识基本的UI资源
2.2.1 什么是UI精灵(Sprite)
2.2.2 什么是UI图集(Atlas)
2.2.3 什么是UI贴图(Texture)
2.2.4 什么是UI标签(Label)
2.2.5 什么是UI字体(Font)
2.3 制作第一个UI图集
2.3.1 学会解剖UI的资源结构
2.3.2 如何导入切好的美术资源
2.3.3 用Atlas Maker制作图集
2.4 制作第一个UI字体
2.4.1 为什么要制作UI字体
2.4.2 静态字体和动态字体
2.4.3 制作静态字体介绍
2.4.4 制作动态字体介绍
2.5 创建第一个UI
2.5.1 创建一个2D UI
2.5.2 创建一个3D UI
2.5.3 了解UIRoot、UIPanel和UICamera组件
2.6 2DUI和3DUI的工作原理
2.6.1 2DUI的工作原理
2.6.2 3DUI的工作原理
2.6.3 如何判断该选择哪一种UI
2.7 深度(Depth)概念
2.7.1 强化对深度的理解
2.7.2 小心相机的深度
第3章 核心组件
3.1 什么是UI控件
3.2 制作精灵(UISprite)
3.2.1 怎样判断是否应该使用精灵
3.2.2 创建精灵
3.2.3 Sprite组件的设置
3.3 制作标签(Label)
3.3.1 怎样判断是否应当使用标签
3.3.2 创建标签
3.3.3 Label的文字设置
3.4 制作UI纹理(UITexture)
3.4.1 什么情况下使用UITexture
3.4.2 创建纹理
3.4.3 纹理的设置
3.5 制作按钮(Button)
3.5.1 怎样判断应该使用按钮
3.5.2 创建按钮
3.5.3 核心组件BoxCollider
3.5.4 核心组件UIButton
3.5.5 制作按钮的放缩动画
3.5.6 制作按钮的偏移动画
3.5.7 制作按钮的旋转动画
3.5.8 添加按钮单击音效
3.5.9 任何事物都可以变成按钮,不仅仅是UI
3.6 制作进度条(UISlider)
3.6.1 怎样判断是否应当使用进度条
3.6.2 创建进度条
3.6.3 核心组件UISlider设置
3.6.4 进度条的BoxCollider说明
3.7 制作输入框(Input)
3.7.1 怎样判断是否应当使用输入框
3.7.2 创建输入框
3.7.3 核心组件Input设置
3.7.4 输入框使用的一些注意事项
3.8 制作滚动视图(ScrollView)
3.8.1 怎样判断是否应当使用滚动视图
3.8.2 创建滚动视图
3.8.3 滚动视图核心组件UIPanel
3.8.4 滚动视图核心组件UIScrollView
3.8.5 创建一个拖动条
3.8.6 拖动条说明
3.8.7 让视图内的内容可以被拖动
3.8.8 制作滚动视图时的注意事项
3.9 制作复选框(Toggle)
3.9.1 怎样判断是否应当使用复选框
3.9.2 创建复选框
3.9.3 复选框的核心组件UIToggle
3.10 制作下拉菜单(PopupList)
3.10.1 怎样判断是否应当使用下拉菜单
3.10.2 创建下拉菜单
3.10.3 显示当前选中的选项
3.10.4 下拉菜单核心组件PopupList
3.10.5 制作下拉菜单的注意事项
第4章 UI动画
4.1 常见的两种UI动画介绍
4.1.1 要区分UI动画和UI特效两个概念
4.1.2 关于Tween动画
4.1.3 关于Animation动画
4.2 渐隐渐现动画(透明度动画)
4.2.1 透明度动画的介绍和应用
4.2.2 使用透明度动画TweenAlpha
4.2.3 使用透明度动画的注意点
4.3 颜色变化动画(变色动画)
4.3.1 变色动画的介绍和应用
4.3.2 使用颜色动画TweenColor
4.3.3 使用颜色动画的注意点
4.4 位置变换动画(位移动画)
4.4.1 位移动画的介绍和应用
4.4.2 使用位移动画TweenPosition
4.4.3 使用位移动画的注意点
4.5 旋转变化动画(旋转动画)
4.5.1 旋转动画的介绍和应用
4.5.2 使用旋转动画TweenRotation
4.5.3 使用旋转动画的注意点
4.6 大小变化动画(放缩动画)
4.6.1 放缩动画的介绍和应用
4.6.2 使用放缩动画TweenScale
4.6.3 使用放缩动画的注意点
4.7 Tween动画总结
4.8 动画控制组件UIPlayTween
4.8.1 为什么要用UIPlayTween
4.8.2 动画核心组件UIPlayTween讲解
4.8.3 使用UIPlayTween的注意事项
4.9 动画控制组件UIPlayAnimation
4.9.1 为什么要用UIPlayAnimation
4.9.2 为UI添加Animation组件
4.9.3 动画核心组件UIPlayAnimation讲解
4.9.4 使用UIPlayAnimation注意事项
第5章 其他组件
5.1 使用Toggle制作页签
5.1.1 页签的工作原理
5.1.2 一个完整的页签界面
5.1.3 制作两个页签按钮
5.1.4 使用ToggleObjects来记录页签内容
5.1.5 制作页签注意事项
5.2 拖动摄像机来浏览超大界面
5.2.1 拖动相机功能的介绍和应用
5.2.2 核心原理和组件介绍
5.2.3 拖动相机浏览超大界面的注意事项
5.3 使用Grid自动排列UI
5.3.1 自动排列UI的应用
5.3.2 自动排列UI核心组件Grid介绍
5.4 使用DragObject直接拖动物体
5.5 让玩家通过拖动自由改变控件大小
5.6 制作序列帧精灵动画(SpriteAnimation)
5.6.1 什么是序列帧精灵动画
5.6.2 SpriteAnimation组件
第6章 NGUI实战进阶
6.1 UI开发核心问题–UI随屏幕自适应
6.1.1 屏幕分辨率对UI适配的影响
6.1.2 主流设备的屏幕分辨率
6.1.3 自适应核心组件Anchor的使用
6.1.4 使用Anchor的注意事项
6.1.5 正式开发UI之前必须明确的几个问题
6.2 UI元素的相对自适应
6.2.1 什么是UI元素的相对自适应
6.2.2 Anchors的介绍及使用
6.2.3 使用Anchors的范例:背景图的全屏适配
6.2.4 使用Anchors的注意事项
6.3 多摄像机同时协作运行
6.3.1 摄像的渲染层的概念
6.3.2 多摄像机协作的应用范围
6.3.3 如何创建多个UI摄像机
6.3.4 多摄像机协作的注意事项
6.4 巧用九宫格以减少UI资源量
6.4.1 项目安装包大小对项目的影响
第1章初识Unity3
1.1为什么Unity如此优秀4
1.1.1Unity的优势4
1.1.2要意识到的缺点5
1.1.3使用Unity构建的游戏案例6
1.2如何使用Unity9
1.2.1Scene视图、Game视图和工具栏10
1.2.2使用鼠标和键盘11
1.2.3Hierarchy标签和Inspector12
1.2.4Project和Console标签12
1.3开始使用Unity编程13
1.3.1代码在Unity中是如何运行的:脚本组件14
1.3.2使用MonoDevelop,跨平台的IDE15
1.3.3打印到控制台:HelloWorld!16
1.4小结18
第2章构建一个让你置身3D空间的演示19
2.1在开始之前20
2.1.1对项目做计划20
2.1.2了解3D坐标空间21
2.2开始项目:在场景中放置对象22
2.2.1第二步:地板、外墙和内墙22
2.2.2灯光和摄像机25
2.2.3玩家的碰撞器和视口26
2.3让东西移动:应用变换的脚本27
2.3.1图示说明如何通过编程实现旋转27
2.3.2编写代码实现图中演示的运动27
2.3.3本地和全局坐标空间29
2.4用于观察周围的组件脚本:MouseLook30
2.4.1跟踪鼠标运动的水平旋转31
2.4.2在一定范围内的垂直旋转32
2.4.3同时水平和垂直旋转33
2.5键盘输入组件:第一人称控件36
2.5.1响应按下的键36
2.5.2设置独立于计算机运行速度的运动速率37
2.5.3为了碰撞检测,移动CharacterController38
2.5.4调整组件为走路而不是飞翔39
2.6小结41
第3章为3D游戏添加敌人和子弹43
3.1通过射线射击44
3.1.1什么是射线发射44
3.1.2使用命令ScreenPointToRay来发射45
3.1.3为准心和击中点添加可视化提示46
3.2脚本化反应的目标49
3.2.1确定被击中的对象49
3.2.2警告目标它被击中50
3.3基本漫游AI52
3.3.1图解基础AI的工作原理52
3.3.2使用射线发射发现障碍物52
3.3.3跟踪角色状态54
3.4产生敌人预设55
3.4.1什么是预设55
3.4.2创建敌人预设56
3.4.3在不可见的SceneController中实例化57
3.5通过实例化对象进行射击59
3.5.1创建子弹预设59
3.5.2发射子弹并和目标碰撞60
3.5.3伤害玩家63
3.6小结63
第4章为游戏开发图形65
4.1了解美术资源65
4.2构建基础3D场景:白盒67
4.2.1白盒的解释68
4.2.2为关卡绘制地板平面图68
4.2.3根据平面图布局几何体69
4.3使用2D图像给场景贴图70
4.3.1选择文件格式71
4.3.2导入图像文件72
4.3.3应用图像73
4.4使用贴图图像产生天空视觉效果75
4.4.1什么是天空盒75
4.4.2创建一个新天空盒材质76
4.5使用自定义3D模型77
4.5.1选择文件格式78
4.5.2导出和导入模型79
4.6使用粒子系统创建效果81
4.6.1调整默认效果的参数82
4.6.2为火焰应用新贴图83
4.6.3将粒子效果附加到3D对象上84
4.7小结85
第Ⅱ部分轻松工作
第5章使用Unity新的2D功能构建一款记忆力游戏89
5.1设置2D图形90
5.1.1为项目做准备90
5.1.2显示2D图像(亦称精灵)92
5.1.3将摄像机切换为2D模式94
5.2构建卡片对象并让它响应单击95
5.2.1从精灵构建对象95
5.2.2鼠标输入代码96
5.2.3当单击时显示卡片96
5.3显示不同的卡片图像97
5.3.1通过程序加载图像97
5.3.2通过不可见的SceneController来设置图像98
5.3.3实例化一个网格的卡片100
5.3.4打乱卡片101
5.4实现匹配和匹配得分103
5.4.1保存并比较翻开的卡片104
5.4.2隐藏错误卡片104
5.4.3显示积分的文本105
5.5重启按钮106
5.5.1使用SendMessage编写UIButton组件107
5.5.2从SceneController中调用LoadLevel109
5.6小结110
第6章在3D游戏中放置2D图形用户界面111
6.1在开始写代码之前……112
6.1.1直接模式GUI还是高级2D界面112
6.1.2规划布局113
6.1.3导入UI图像114
6.2设置GUI显示114
6.2.1为界面创建画布115
6.2.2按钮、图像和文本标签116
6.2.3控制UI元素的位置118
6.3编写UI中的交互119
6.3.1编写不可见的UIController120
6.3.2创建弹出窗口121
6.3.3使用滑动条和输入域设置值124
6.4通过响应事件更新游戏126
6.4.1集成事件系统127
6.4.2从场景中广播和侦听事件127
6.4.3从HUD广播和侦听事件128
6.5小结130
第7章创建第三人称3D游戏:玩家移动和动画131
7.1调整摄像机视图为第三人称视角133
7.1.1导入一个用于观察的角色133
7.1.2将阴影添加到场景134
7.1.3摄像机环绕玩家角色135
7.2编写程序控制camera-relative的移动137
7.2.1旋转角色,以朝向移动方向138
7.2.2朝着方向向前移动140
7.3实现跳跃动作141
7.3.1应用垂直速度和加速度142
7.3.2修改地面检测来处理边缘和斜坡143
7.4设置玩家角色上的动画146
7.4.1在导入的模型上定义动画剪辑148
7.4.2为动画创建动画控制器149
7.4.3编写操作Animator组件的代码153
7.5小结154
第8章在游戏中添加交互设施和物件155
8.1创建门和其他设施156
8.1.1由按键控制开/关的门156
8.1.2在开门之前检查距离和朝向157
8.1.3创建一个变色监控器159
8.2通过碰撞与对象交互160
8.2.1和具有物理功能的障碍物碰撞160
8.2.2用一个压力板来触发门161
8.2.3收集当前关卡游戏中分散的物件163
8.3管理仓库数据和游戏状态165
8.3.1设置玩家和仓库管理器165
8.3.2编程实现游戏管理器166
8.3.3把物品存储在集合对象中:List与Dictionary170
8.4使用和装备物品的仓库UI173
8.4.1在UI中显示仓库物品173
8.4.2装备一个用来开门的钥匙175
8.4.3通过使用血量包来恢复玩家的血量177
8.5小结178
第Ⅲ部分冲刺阶段
第9章将游戏连接到互联网181
9.1创建户外场景182
9.1.1使用天空盒生成天空视觉效果182
9.1.2通过代码设置大气环境183
9.2从互联网服务下载天气数据185
9.2.1使用协程请求WWW数据188
9.2.2解析XML192
9.2.3解析JSON193
9.2.4基于天气数据影响场景195
9.3添加一个网络布告栏196
9.3.1从互联网加载图像196
9.3.2在布告栏上显示图像199
9.3.3缓存下载的图像以供重用200
9.4将数据发送到Web服务器201
9.4.1跟踪当前的天气:发送post请求202
9.4.2PHP中的服务器端代码204
9.5小结204
第10章播放音频:音效和音乐205
10.1导入音效206
10.1.1所支持的文件格式206
10.1.2导入音频文件207
10.2播放音效208
10.2.1音频剪辑、音源和声音侦听器208
10.2.2设定一个循环声音209
10.2.3从代码触发音效210
10.3音频控制接口211
10.3.1建立中心AudioManager212
10.3.2音量控制UI214
10.3.3播放UI声音217
10.4背景音乐218
10.4.1播放循环音乐218
10.4.2独立控制音乐的音量221
10.4.3歌曲间的淡入淡出223
10.5小结226
第11章将各部分整合为一个完整的游戏227
11.1再次利用项目来构建角色扮演RPG228
11.1.1将多个项目的资源和代码装配在一起228
11.1.2编写指向-单击的控件:移动和设备231
11.1.3使用新界面替换旧GUI235
11.2开发总体的游戏结构241
11.2.1控制任务流和多关卡242
11.2.2通过到达退出条件完成一个关卡245
11.2.3当被敌人捕捉时关卡失败247
11.3处理玩家游戏过程中的进度249
11.3.1保存并加载玩家进度249
11.3.2通过完成三个关卡打败游戏253
11.4小结255
第12章将游戏部署到玩家的设备255
12.1构建桌面环境:Windows、Mac和Linux259
12.1.1构建应用259
12.1.2调整PlayerSettings:设置游戏的名称和图标260
12.1.3平台依赖的编译261
12.2为Web构建游戏262
12.2.1UnityPlayer和HTML/WebGL262
12.2.2构建Unity文件和一个测试Web页面262
12.2.3与浏览器中的JavaScript通信263
12.3构建移动应用的平台:iOS和Android264
12.3.1设置构建工具265
12.3.2贴图压缩268
12.3.3开发插件269
12.4小结277
附录A场景导航和键盘快捷键279
A.1使用鼠标进行场景导航279
A.2一般使用键盘快捷键280
附录B与Unity一同使用的外部工具281
B.1编程工具281
B.1.1VisualStudio281
B.1.2Xcode281
B.1.3AndroidSDK282
B.1.4SVN、Git或Mercurial282
B.23D美术应用282
B.2.1Maya282
B.2.23dsMax282
B.2.3Blender283
B.32D图像编辑器283
B.3.1Photoshop283
B.3.2GIMP283
B.3.3TexturePacker283
B.4音频软件283
B.4.1ProTools284
B.4.2Audacity284
附录C在Blender中建模一个板凳285
C.1构建网格几何体285
C.2模型贴图映射288
附录D在线学习资源293
D.1附加的指南293
D.2代码库294
后序297
第1章 人工智能导论 1
1.1 人工智能 1
1.2 游戏中的人工智能 2
1.3 人工智能技术 3
1.3.1 有限状态机 3
1.3.2 人工智能中的随机性和概率 5
1.3.3 感应器系统 6
1.3.4 群组、蜂拥和羊群效应 7
1.3.5 路径跟随和引导 8
1.3.6 A*寻路算法 9
1.3.7 导航网格 16
1.3.8 行为树 18
1.3.9 运动 20
1.3.10 Dijkstra算法 23
1.4 本章小结 23
第2章 有限状态机 24
2.1 玩家的坦克 24
2.1.1 PlayerTankController类 25
2.1.2 初始化 26
2.2 子弹类 29
2.3 设置航点 31
2.4 抽象有限状态机类 32
2.5 敌方坦克的人工智能 34
2.5.1 巡逻状态 36
2.5.2 追逐状态 38
2.5.3 攻击状态 38
2.5.4 死亡状态 40
2.6 使用有限状态机框架 42
2.6.1 AdvanceFSM类 42
2.6.2 FSMState类 43
2.6.3 状态类 44
2.6.4 NPCTankController 类 46
2.7 本章小结 48
第3章 随机性和概率 49
3.1 随机性 50
3.2 概率的定义 52
3.2.1 独立与关联事件 53
3.2.2 条件概率 53
3.3 人物个性 56
3.4 有限状态机和概率 57
3.5 动态人工智能 59
3.6 示例老虎机 60
3.6.1 随机老虎机 60
3.6.2 加权概率 63
3.7 本章小结 68
第4章 感应器的实现 70
4.1 基本的感觉系统 71
4.2 场景设置 72
4.3 玩家的坦克与切面 73
4.3.1 玩家的坦克 74
4.3.2 切面 75
4.4 人工智能角色 76
4.4.1 感观 77
4.4.2 视觉 78
4.4.3 触觉 80
4.5 测试 82
4.6 本章小结 83
第5章 群组行为 84
5.1 岛屿示例中的群组行为 84
5.1.1 个体的行为 85
5.1.2 控制器 90
5.2 替代实现 92
5.3 本章小结 99
第6章 路径跟随和引导行为 100
6.1 跟随一条路径 100
6.1.1 路径脚本 102
6.1.2 路径跟随 103
6.2 避开障碍物 106
6.2.1 添加定制图层 107
6.2.2 避开障碍 108
6.3 本章小结 113
第7章 A*寻路算法 114
7.1 回顾A*寻路算法 114
7.2 实现 116
7.2.1 Node 116
7.2.2 PriorityQueue 117
7.2.3 GridManager 118
7.2.4 AStar 123
7.2.5 TestCode类 126
7.3 场景设置 128
7.4 测试 131
7.5 本章小结 132
第8章 导航网格 133
8.1 简介 134
8.2 设置地图 134
8.2.1 Navigation Static 135
8.2.2 烘焙导航网格 135
8.2.3 导航网格代理 136
8.3 有斜坡的场景 139
8.4 NavMeshLayers 141
8.5 分离网格链接 144
8.5.1 生成分离网格链接 145
8.5.2 手动生成分离网格链接 146
8.6 本章小结 148
第9章 行为树 149
9.1 Behave插件 149
9.2 工作流 151
9.3 行为节点 153
9.4 与脚本的接口 155
9.5 装饰节点 158
9.6 Behave调试器 160
9.7 顺序节点 160
9.8 探索Behave的结果 162
9.9 选择节点 163
9.10 优先级选择节点 166
9.11 并行节点 168
9.12 引用 169
9.13 机器人与外星人项目 170
9.14 本章小结 173
第10章 融会贯通 174
10.1 场景设置 175
10.2 车辆 177
10.2.1 玩家控制的车辆 178
10.2.2 人工智能车辆控制器 180
10.2.3 有限状态机 182
10.3 武器 187
10.3.1 枪 187
10.3.2 子弹 189
10.3.3 发射器 191
10.3.4 导弹 193
10.4 本章小结 195
1.1 配置脚本开发环境 ………………………………..2
1.1.1 配置 Visual Studio …………………….2
1.1.2 配置MonoDevelop ……………………6
1.1.3 脚本的创建 ……………………………..8
1.2 变量、数组与函数 ………………………………..9
1.2.1 变量的声明与使用 ……………………9
1.2.2 数组的声明与使用 ………………….11
1.2.3 函数的声明与使用 ………………….12
1.3 语句、表达式与运算符 ……………………. 14
1.3.1 语句 ……………………………………….14
1.3.2 表达式 ……………………………………16
1.3.3 运算符 ……………………………………16
1.4 协程(Coroutine) ………………………………. 18
1.5 类与类的使用 ……………………………………… 21
1.6 输出调试信息 ……………………………………… 22
1.7 C# 脚本示例 ………………………………………… 22
1.8 Unity 脚本事件执行顺序 ………………….. 26
1.9 脚本模板与脚本编码 ………………………… 28
1.10 Unity 5 脚本升级 ……………………………… 29
第 2 章 JavaScript 脚本编程基础 ….. 31
2.1 JavaScript 脚本编程基础 ………………….. 32
2.2 变量、数组与函数 …………………………….. 32
2.2.1 变量 ……………………………………….32
2.2.2 数组 ……………………………………….33
2.2.3 函数 ……………………………………….35
2.3 表达式、语句与运算符 ……………………. 37
2.4 JavaScript 脚本示例 …………………………… 39
2.5 JavaScript 脚本与 C# 脚本的交互 …… 41
第 3 章星际航行游戏——JSpace Shooter ……………… 45
3.1 导入模型、贴图和材质 ……………………. 46
3.1.1 导入资源包文件 ……………………..46
3.1.2 创建飞船对象 …………………………49
3.1.3 设置摄像机参数 ……………………..50
3.1.4 添加图片背景 …………………………50
3.1.5 添加粒子背景效果 ………………….52
3.2 编写脚本代码 ……………………………………… 53
3.2.1 键盘控制飞船移动 ………………….53
3.2.2 实现射击行为(Shot) …………….57
3.2.3 添加小行星(Asteroid) …………..61
3.3 添加音频 ……………………………………………… 69
3.3.1 添加碰撞爆炸音频 ………………….69
3.3.2 添加飞船射击音频 ………………….69
3.3.3 添加背景音效 …………………………70
3.4 添加计分文本 ……………………………………… 71
3.4.1 添加计分 Text 组件 …………………71
3.4.2 添加计分功能 …………………………72
3.5 游戏结束与重新开始 ………………………… 74
3.5.1 添加游戏结束的 Text 组件 ………74
3.5.2 添加结束游戏的功能 ………………75
3.5.3 添加重新开始的 Text 组件 ………76
3.5.4 添加重新开始游戏的功能 ……….77
第 4 章潜行游戏——Stealth ……….. 79
4.1 加载场景 …………………………………………… 80
4.1.1 创建场景 ………………………………..80
4.1.2 添加场景元素 …………………………80
4.1.3 添加灯光 ………………………………..82
4.1.4 烘焙场景Lightmaps ………………..84
4.1.5 添加 Tag 管理类 ……………………..87
4.1.6 添加转场效果 …………………………87
4.1.7 添加游戏控制器GameController ……………………….89
4.1.8 添加 CCTV Camera …………………92
4.1.9 添加 Laser Grid ……………………….94
4.2 导入和配置人物角色 ………………………… 97
4.2.1 导入角色模型 …………………………97
4.2.2 设置角色动画 …………………………98
4.2.3 创建动画参数管理类 ………………99
4.2.4 添加控制角色运动功能 …………101
4.2.5 添加控制摄像机跟随的功能 ….104
4.3 主角与环境交互 ………………………………..107
4.3.1 添加控制开关台的功能 …………107
4.3.2 添加管理房间钥匙卡的功能 ….110
4.3.3 添加控制单开门的功能 …………112
4.3.4 添加控制双开门的功能 …………115
4.4 主角与敌人交互 ………………………………..116
4.4.1 添加管理角色生命值的功能 ….116
4.4.2 添加敌人角色模型 ………………..118
4.4.3 添加敌人自动搜索角色的功能 …………………………120
4.4.4 添加控制敌人运动功能 …………123
4.4.5 添加控制敌人射击的功能 ……..126
第 5 章粒子碰撞回调功能——Particle Callbacks ………….. 129
5.1 Shuriken 粒子系统介绍 ……………………130
5.2 加载场景 …………………………………………….131
5.3 创建粒子效果 …………………………………….134
5.3.1 创建燃烧时冒烟的粒子效果 …..134
5.3.2 创建燃烧时火星四溅的粒子效果 ………………………….139
5.3.3 火焰大小控制 ……………………….140
5.3.4 创建洒水的粒子效果 …………….143
5.3.5 控制洒水位置 ……………………….146
5.4 碰撞回调函数解析 ……………………………148
5.5 粒子碰撞回调函数应用案例 …………..153
5.5.1 水滴与桶盖碰撞的处理 …………153
5.5.2 实现水滴与燃烧桶碰撞熄灭火焰的效果 …………………….155
第 6 章Mecanim动画系统介绍——Mecanim Example Scenes ….. 159
6.1 Mecanim动画系统简介 …………………..160
6.1.1 Mecanim动画系统的工作流 ….160
6.1.2 Mecanim动画系统中的术语 ….160
第1章 欢迎来到Shader的世界 2
1.1 程序员的三大浪漫 2
1.2 本书结构 3
第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 顶点着色器 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 总结 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
第3章 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 最聪明的孩子:顶点/片元着
色器 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
第4章 学习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 顶点的坐标空间变换过程 72
4.6.4 模型空间 73
4.6.5 世界空间 73
4.6.6 观察空间 75
4.6.7 裁剪空间 77
4.6.8 屏幕空间 83
4.6.9 总结 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
第2篇 初级篇
第5章 开始Unity Shader学习之旅 100
5.1 本书使用的软件和环境 100
5.2 一个最简单的顶点/片元着色器 100
5.2.1 顶点/片元着色器的基本
结构 101
5.2.2 模型数据从哪里来 103
5.2.3 顶点着色器和片元着色器之间如何通信 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
第6章 Unity中的基础光照 121
6.1 我们是如何看到这个世界的 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 逐像素还是逐顶点 125
6.2.6 总结 125
6.3 Unity中的环境光和自发光 126
6.4 在Unity Shader中实现漫反射光照
模型 126
6.4.1 实践:逐顶点光照 126
6.4.2 实践:逐像素光照 129
6.4.3 半兰伯特模型 130
6.5 在Unity Shader中实现高光反射
光照模型 131
6.5.1 实践:逐顶点光照 132
6.5.2 实践:逐像素光照 134
6.5.3 Blinn-Phong光照模型 135
6.6 召唤神龙:使用Unity内置的
函数 136
第7章 基础纹理 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
第8章 透明效果 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
第3篇 中级篇
第9章 更复杂的光照 180
9.1 Unity的渲染路径 180
9.1.1 前向渲染路径 182
9.1.2 顶点照明渲染路径 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
第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
第11章 让画面动起来 230
11.1 Unity Shader中的内置变量
(时间篇) 230
11.2 纹理动画 230
11.2.1 序列帧动画 230
11.2.2 滚动的背景 233
11.3 顶点动画 234
11.3.1 流动的河流 234
11.3.2 广告牌 236
11.3.3 注意事项 239
第4篇 高级篇
第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
第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 重建世界坐标 276
13.3.2 雾的计算 278
13.3.3 实现 278
13.4 再谈边缘检测 283
13.5 扩展阅读 287
第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
第15章 使用噪声 298
15.1 消融效果 298
15.2 水波效果 302
15.3 再谈全局雾效 305
15.4 扩展阅读 309
15.5 参考文献 309
第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 减少需要处理的顶点数目 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
第5篇 扩展篇
第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
第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
第19章 Unity 5更新了什么 365
19.1 场景“更亮了” 365
19.2 表面着色器更容易“报错了” 365
19.3 当家做主:自己控制非统一缩放的
网格 366
19.4 固定管线着色器逐渐退出舞台 366
第20章 还有更多内容吗 368
20.1 如果你想深入了解渲染的话 368
20.2 世界那么大 369
20.3 参考文献 369
End.
Note by HF.
Unity 5权威讲解
Unity 3D NGUI 实战教程
Unity 5实战 使用C和Unity开发多平台游戏
Unity 3D人工智能编程
Unity官方案例精讲
Unity Shader入门精要
1. Unity 5权威讲解 #
目录第1章 Unity 5简介 1
1.1 Unity 3D游戏引擎的诞生 2
1.2 Unity 5的优势 2
1.2.1 支持多平台 2
1.2.2 集成开发环境 3
1.2.3 所有功能免费 4
1.2.4 中间件内建 5
1.2.5 开放社区 5
1.2.6 资源商店 6
1.3 使用Unity制作的游戏 7
1.4 下载Unity 9
1.4.1 安装Unity 10
1.4.2 选择Unity许可 11
1.4.3 注册并登录Unity 12
1.5 Unity界面 13
1.5.1 视图 16
1.5.2 工具栏 27
1.5.3 设置快捷键 34
1.6 小结 34
第2章 准备游戏开发 35
2.1 开发的游戏以及开发顺序 36
2.2 新建项目 36
2.3 设置Unity IDE 37
2.4 系统管理项目视图 39
2.5 导入角色模型 39
2.6 创建资源商店账号 42
2.7 从项目视图访问资源商店 44
2.8 从资源商店下载资源 45
2.9 小结 48
第3章 制作游戏场景 49
3.1 3D模型 50
3.2 纹理 51
3.3 材质 53
3.4 应用纹理 54
3.5 着色器以及基于物理的着色 58
3.5.1 渲染模式 59
3.5.2 反照率 59
3.5.3 金属 59
3.5.4 法线贴图 59
3.5.5 高度图 60
3.5.6 遮挡贴图 60
3.5.7 放射 61
3.5.8 细节遮蔽 61
3.6 表现地面阴影——使用法线贴图 61
3.7 预设 62
3.8 用预设制作墙体 64
3.9 光照 68
3.9.1 平行光 68
3.9.2 点光源 69
3.9.3 聚光灯 69
3.9.4 区域光 70
3.10 天空的表现方法 71
3.10.1 六面天空盒 72
3.10.2 程序天空盒 74
3.10.3 立方图天空盒 76
3.11 小结 76
第4章 制作主人公角色 77
4.1 空游戏对象 78
4.2 导入3D模型并设置选项 79
4.3 组件 80
4.4 生成脚本 81
4.5 下载键盘输入值 84
4.6 角色移动 87
4.6.1 处理组件缓存 88
4.6.2 游戏对象的移动 89
4.6.3 Translate函数 90
4.7 单位向量 91
4.8 角色旋转:Rotate 94
4.9 摄像机追踪:Follow Cam 95
4.10 Legacy动画系统 98
4.11 动画片段 99
4.12 动画控件 104
4.13 动画合成 107
4.14 实时阴影 108
4.15 运用投影器制作阴影 111
4.16 运用平面网格制作阴影 115
4.17 小结 117
第5章 制作子弹发射效果 119
5.1 准备子弹模型 120
5.2 Rigidbody组件 121
5.3 设置物理引擎属性:Physics Manager 124
5.4 Collider组件 125
5.4.1 Box Collider 125
5.4.2 Sphere Collider 125
5.4.3 Capsule Collider 126
5.4.4 Mesh Collider 126
5.4.5 Wheel Collider 127
5.4.6 Terrain Collider 128
5.5 碰撞感知条件 128
5.6 碰撞事件 130
5.7 Tag应用 132
5.8 子弹发射逻辑 135
5.9 制作子弹发射轨迹:Trail Renderer 140
5.10 应用粒子系统 145
5.11 制作爆炸效果并设置爆炸威力 150
5.12 随机使用纹理 155
5.13 声音:AudioSource与AudioListener 157
5.14 枪口火焰效果:Muzzle Flash 164
5.15 小结 170
第6章 制作敌对角色 171
6.1 Mecanim动画系统 172
6.2 导入怪兽3D模型 173
6.3 转换为Mecanim动画 173
6.4 动画控制器 177
6.5 导航:怪兽追击例程 183
6.5.1 生成导航网格并烘焙 184
6.5.2 Nav Mesh Agent 185
6.6 实现人工智能 188
6.7 怪兽攻击例程 197
6.8 怪兽被袭时的反应 199
6.9 血迹效果 203
6.10 贴图:地面上的血迹效果 206
6.11 赋予怪兽攻击技能 211
6.12 特定层之间的碰撞感知 215
6.13 优化Mecanim动画角色的骨骼结构 218
6.14 怪兽停止攻击:Tag 220
6.15 怪兽停止攻击:Delegate、Event 224
6.16 怪兽的死亡处理 228
6.17 小结 235
第7章 Unity UI 237
7.1 Canvas对象 238
7.1.1 EventSystem对象 239
7.1.2 Canvas组件 240
7.2 Rect Transform组件 244
7.3 anchoredPosition属性 252
7.4 Image组件 254
7.4.1 Simple 256
7.4.2 Sliced 256
7.4.3 Tiled 258
7.4.4 Filed 258
7.5 RawImage 组件 259
7.6 Button组件 260
7.7 Text组件 271
7.8 Scroll Rect组件 272
7.8.1 Content属性 275
7.8.2 Mask组件 276
7.9 制作游戏分数UI 277
7.10 制作生命条 285
7.11 小结 289
第8章 游戏管理器 291
8.1 怪兽出现逻辑 292
8.2 访问游戏管理器 296
8.3 单例模式 298
8.4 对象池 300
8.5 共享函数:声音处理 308
8.6 小结 311
第9章 灵活运用射线投射 313
9.1 射线投射 314
9.2 油桶爆炸 319
9.3 实现激光束 322
第10章 导航仪高级技巧 329
10.1 动态障碍物 330
10.2 分离网格链接 333
10.3 用户自定义生成分离网格链接 335
第11章 光照贴图、灯光探测器 337
11.1 光照 338
11.1.1 Generate Lightmap UVs 选项 338
11.1.2 Lightmap Static标记 338
11.1.3 光照视图 339
11.1.4 准备烘焙光照的过程 341
11.1.5 Auto选项 342
11.1.6 构建光照贴图 342
11.1.7 Area Light 345
11.2 灯光探测器 346
11.2.1 Light Probe Group 347
11.2.2 Anchor Override 350
11.3 小结 351
第12章 场景分离与合并 353
12.1 场景分离 354
12.2 场景合并 357
第13章 Unity内置网络游戏 361
13.1 网络游戏的定义 362
13.2 网络游戏的物理结构 362
13.3 网络通信协议 363
13.4 Unity内置网络功能 363
13.4.1 网络视图 364
13.4.2 状态同步 364
13.4.3 远程过程调用 365
13.5 Unity网络游戏步骤 366
13.5.1 游戏服务器初始化 366
13.5.2 客户端游戏连接 367
13.5.3 各游戏端点之间的通信 368
13.6 开发网络游戏 368
13.6.1 生成并初始化项目 369
13.6.2 场景制作 369
13.6.3 制作Player 371
13.6.4 Character Controller移动逻辑 371
13.6.5 制作网络管理器 373
13.6.6 构建可执行文件 374
13.6.7 查看连接网络的用户数量 377
13.6.8 制作网络玩家 380
13.6.9 摄像机追踪逻辑 383
13.6.10 平滑的同步处理(OnSerializeNetworkView) 387
13.6.11 发射例程(调用RPC) 392
13.6.12 动画同步 399
13.6.13 探测子弹的碰撞 405
13.6.14 死亡和复活处理 406
13.6.15 终止连接的相关处理 414
13.7 小结 415
第14章 使用Photon Cloud制作网络游戏 417
14.1 第二代Unity网络游戏引擎UNET 418
14.2 第三方网络游戏引擎 418
14.3 PhotonNetwork游戏引擎 418
14.3.1 Photon Server与Photon Cloud 419
14.3.2 加入会员 419
14.4 制作坦克大战游戏 421
14.4.1 坦克移动逻辑 422
14.4.2 履带动画 424
14.4.3 设置摄像机追踪逻辑与摄像机位置 427
14.4.4 旋转炮塔 428
14.4.5 调整炮身角度 431
14.4.6 建立炮弹预设和发射逻辑 432
14.4.7 炮弹发射音效 438
14.5 安装Photon Unity Networking插件 439
14.6 将坦克游戏更改为Photon Cloud版本 441
14.6.1 连接Photon Cloud 442
14.6.2 随机配对 444
14.6.3 制作房间 445
14.6.4 Photon View 447
14.6.5 动态生成坦克 448
14.6.6 构建游戏并测试连接 451
14.6.7 控制自己的坦克 453
14.6.8 平滑移动和旋转处理 454
14.6.9 同步炮塔与炮身 458
14.6.10 发射炮弹 463
14.6.11 坦克被击中时的处理及复活 465
14.7 制作游戏大厅 469
14.7.1 制作大厅场景 469
14.7.2 制作登录UI 471
14.7.3 进入游戏房间 479
14.7.4 制作坦克HUD 484
14.7.5 创建并进入房间 492
14.7.6 构建房间目录UI 497
14.7.7 接收房间列表 504
14.7.8 动态增加按钮事件 516
14.8 战地细节功能 520
14.8.1 显示房间内的玩家数 520
14.8.2 退出房间 523
14.8.3 显示连接日志 525
14.8.4 事件钩子 530
14.9 评分并显示 534
14.10 在Unity中连接数据库 547
14.10.1 JSON 547
14.10.2 SimpleJSON 549
14.10.3 将分数信息保存到数据库 551
14.10.4 从数据库获取排名信息 554
14.11 小结 557
第15章 提升游戏真实感 559
15.1 布娃娃系统 560
15.1.1 创建项目并下载资源 560
15.1.2 制作舞台 561
15.1.3 生成3D模型的布娃娃系统 562
15.2 触屏 571
15.2.1 ScreenPointToRay函数 571
15.2.2 Touch类 574
15.2.3 Unity Remote4 577
15.3 通过触屏移动 579
15.4 小结 582
附录 数据库 583
1.数据库和数据库管理系统 584
2.数据库服务器 584
3. SQL 584
4. DBMS的数据管理 584
5.数据表 585
6.列与行 585
7. SQL 586
2. Unity 3D NGUI 实战教程 #
第1章 初识NGUI1.1 游戏UI开发介绍
1.1.1 什么是游戏UI
1.1.2 UI为何如此重要
1.1.3 UI开发的流程
1.1.4 UI开发的难点
1.2 什么是NGUI
1.2.1 NGUI插件介绍
1.2.2 NGUI的强大优势
第2章 NGUI基础
2.1 导入NGUI插件
2.1.1 NGUI版本介绍
2.1.2 NGUI的下载和购买
2.1.3 导入NGUI插件应用
2.1.4 导入常见问题
2.2 认识基本的UI资源
2.2.1 什么是UI精灵(Sprite)
2.2.2 什么是UI图集(Atlas)
2.2.3 什么是UI贴图(Texture)
2.2.4 什么是UI标签(Label)
2.2.5 什么是UI字体(Font)
2.3 制作第一个UI图集
2.3.1 学会解剖UI的资源结构
2.3.2 如何导入切好的美术资源
2.3.3 用Atlas Maker制作图集
2.4 制作第一个UI字体
2.4.1 为什么要制作UI字体
2.4.2 静态字体和动态字体
2.4.3 制作静态字体介绍
2.4.4 制作动态字体介绍
2.5 创建第一个UI
2.5.1 创建一个2D UI
2.5.2 创建一个3D UI
2.5.3 了解UIRoot、UIPanel和UICamera组件
2.6 2DUI和3DUI的工作原理
2.6.1 2DUI的工作原理
2.6.2 3DUI的工作原理
2.6.3 如何判断该选择哪一种UI
2.7 深度(Depth)概念
2.7.1 强化对深度的理解
2.7.2 小心相机的深度
第3章 核心组件
3.1 什么是UI控件
3.2 制作精灵(UISprite)
3.2.1 怎样判断是否应该使用精灵
3.2.2 创建精灵
3.2.3 Sprite组件的设置
3.3 制作标签(Label)
3.3.1 怎样判断是否应当使用标签
3.3.2 创建标签
3.3.3 Label的文字设置
3.4 制作UI纹理(UITexture)
3.4.1 什么情况下使用UITexture
3.4.2 创建纹理
3.4.3 纹理的设置
3.5 制作按钮(Button)
3.5.1 怎样判断应该使用按钮
3.5.2 创建按钮
3.5.3 核心组件BoxCollider
3.5.4 核心组件UIButton
3.5.5 制作按钮的放缩动画
3.5.6 制作按钮的偏移动画
3.5.7 制作按钮的旋转动画
3.5.8 添加按钮单击音效
3.5.9 任何事物都可以变成按钮,不仅仅是UI
3.6 制作进度条(UISlider)
3.6.1 怎样判断是否应当使用进度条
3.6.2 创建进度条
3.6.3 核心组件UISlider设置
3.6.4 进度条的BoxCollider说明
3.7 制作输入框(Input)
3.7.1 怎样判断是否应当使用输入框
3.7.2 创建输入框
3.7.3 核心组件Input设置
3.7.4 输入框使用的一些注意事项
3.8 制作滚动视图(ScrollView)
3.8.1 怎样判断是否应当使用滚动视图
3.8.2 创建滚动视图
3.8.3 滚动视图核心组件UIPanel
3.8.4 滚动视图核心组件UIScrollView
3.8.5 创建一个拖动条
3.8.6 拖动条说明
3.8.7 让视图内的内容可以被拖动
3.8.8 制作滚动视图时的注意事项
3.9 制作复选框(Toggle)
3.9.1 怎样判断是否应当使用复选框
3.9.2 创建复选框
3.9.3 复选框的核心组件UIToggle
3.10 制作下拉菜单(PopupList)
3.10.1 怎样判断是否应当使用下拉菜单
3.10.2 创建下拉菜单
3.10.3 显示当前选中的选项
3.10.4 下拉菜单核心组件PopupList
3.10.5 制作下拉菜单的注意事项
第4章 UI动画
4.1 常见的两种UI动画介绍
4.1.1 要区分UI动画和UI特效两个概念
4.1.2 关于Tween动画
4.1.3 关于Animation动画
4.2 渐隐渐现动画(透明度动画)
4.2.1 透明度动画的介绍和应用
4.2.2 使用透明度动画TweenAlpha
4.2.3 使用透明度动画的注意点
4.3 颜色变化动画(变色动画)
4.3.1 变色动画的介绍和应用
4.3.2 使用颜色动画TweenColor
4.3.3 使用颜色动画的注意点
4.4 位置变换动画(位移动画)
4.4.1 位移动画的介绍和应用
4.4.2 使用位移动画TweenPosition
4.4.3 使用位移动画的注意点
4.5 旋转变化动画(旋转动画)
4.5.1 旋转动画的介绍和应用
4.5.2 使用旋转动画TweenRotation
4.5.3 使用旋转动画的注意点
4.6 大小变化动画(放缩动画)
4.6.1 放缩动画的介绍和应用
4.6.2 使用放缩动画TweenScale
4.6.3 使用放缩动画的注意点
4.7 Tween动画总结
4.8 动画控制组件UIPlayTween
4.8.1 为什么要用UIPlayTween
4.8.2 动画核心组件UIPlayTween讲解
4.8.3 使用UIPlayTween的注意事项
4.9 动画控制组件UIPlayAnimation
4.9.1 为什么要用UIPlayAnimation
4.9.2 为UI添加Animation组件
4.9.3 动画核心组件UIPlayAnimation讲解
4.9.4 使用UIPlayAnimation注意事项
第5章 其他组件
5.1 使用Toggle制作页签
5.1.1 页签的工作原理
5.1.2 一个完整的页签界面
5.1.3 制作两个页签按钮
5.1.4 使用ToggleObjects来记录页签内容
5.1.5 制作页签注意事项
5.2 拖动摄像机来浏览超大界面
5.2.1 拖动相机功能的介绍和应用
5.2.2 核心原理和组件介绍
5.2.3 拖动相机浏览超大界面的注意事项
5.3 使用Grid自动排列UI
5.3.1 自动排列UI的应用
5.3.2 自动排列UI核心组件Grid介绍
5.4 使用DragObject直接拖动物体
5.5 让玩家通过拖动自由改变控件大小
5.6 制作序列帧精灵动画(SpriteAnimation)
5.6.1 什么是序列帧精灵动画
5.6.2 SpriteAnimation组件
第6章 NGUI实战进阶
6.1 UI开发核心问题–UI随屏幕自适应
6.1.1 屏幕分辨率对UI适配的影响
6.1.2 主流设备的屏幕分辨率
6.1.3 自适应核心组件Anchor的使用
6.1.4 使用Anchor的注意事项
6.1.5 正式开发UI之前必须明确的几个问题
6.2 UI元素的相对自适应
6.2.1 什么是UI元素的相对自适应
6.2.2 Anchors的介绍及使用
6.2.3 使用Anchors的范例:背景图的全屏适配
6.2.4 使用Anchors的注意事项
6.3 多摄像机同时协作运行
6.3.1 摄像的渲染层的概念
6.3.2 多摄像机协作的应用范围
6.3.3 如何创建多个UI摄像机
6.3.4 多摄像机协作的注意事项
6.4 巧用九宫格以减少UI资源量
6.4.1 项目安装包大小对项目的影响
3. Unity 5实战 使用C#和Unity开发多平台游戏 #
第Ⅰ部分起步第1章初识Unity3
1.1为什么Unity如此优秀4
1.1.1Unity的优势4
1.1.2要意识到的缺点5
1.1.3使用Unity构建的游戏案例6
1.2如何使用Unity9
1.2.1Scene视图、Game视图和工具栏10
1.2.2使用鼠标和键盘11
1.2.3Hierarchy标签和Inspector12
1.2.4Project和Console标签12
1.3开始使用Unity编程13
1.3.1代码在Unity中是如何运行的:脚本组件14
1.3.2使用MonoDevelop,跨平台的IDE15
1.3.3打印到控制台:HelloWorld!16
1.4小结18
第2章构建一个让你置身3D空间的演示19
2.1在开始之前20
2.1.1对项目做计划20
2.1.2了解3D坐标空间21
2.2开始项目:在场景中放置对象22
2.2.1第二步:地板、外墙和内墙22
2.2.2灯光和摄像机25
2.2.3玩家的碰撞器和视口26
2.3让东西移动:应用变换的脚本27
2.3.1图示说明如何通过编程实现旋转27
2.3.2编写代码实现图中演示的运动27
2.3.3本地和全局坐标空间29
2.4用于观察周围的组件脚本:MouseLook30
2.4.1跟踪鼠标运动的水平旋转31
2.4.2在一定范围内的垂直旋转32
2.4.3同时水平和垂直旋转33
2.5键盘输入组件:第一人称控件36
2.5.1响应按下的键36
2.5.2设置独立于计算机运行速度的运动速率37
2.5.3为了碰撞检测,移动CharacterController38
2.5.4调整组件为走路而不是飞翔39
2.6小结41
第3章为3D游戏添加敌人和子弹43
3.1通过射线射击44
3.1.1什么是射线发射44
3.1.2使用命令ScreenPointToRay来发射45
3.1.3为准心和击中点添加可视化提示46
3.2脚本化反应的目标49
3.2.1确定被击中的对象49
3.2.2警告目标它被击中50
3.3基本漫游AI52
3.3.1图解基础AI的工作原理52
3.3.2使用射线发射发现障碍物52
3.3.3跟踪角色状态54
3.4产生敌人预设55
3.4.1什么是预设55
3.4.2创建敌人预设56
3.4.3在不可见的SceneController中实例化57
3.5通过实例化对象进行射击59
3.5.1创建子弹预设59
3.5.2发射子弹并和目标碰撞60
3.5.3伤害玩家63
3.6小结63
第4章为游戏开发图形65
4.1了解美术资源65
4.2构建基础3D场景:白盒67
4.2.1白盒的解释68
4.2.2为关卡绘制地板平面图68
4.2.3根据平面图布局几何体69
4.3使用2D图像给场景贴图70
4.3.1选择文件格式71
4.3.2导入图像文件72
4.3.3应用图像73
4.4使用贴图图像产生天空视觉效果75
4.4.1什么是天空盒75
4.4.2创建一个新天空盒材质76
4.5使用自定义3D模型77
4.5.1选择文件格式78
4.5.2导出和导入模型79
4.6使用粒子系统创建效果81
4.6.1调整默认效果的参数82
4.6.2为火焰应用新贴图83
4.6.3将粒子效果附加到3D对象上84
4.7小结85
第Ⅱ部分轻松工作
第5章使用Unity新的2D功能构建一款记忆力游戏89
5.1设置2D图形90
5.1.1为项目做准备90
5.1.2显示2D图像(亦称精灵)92
5.1.3将摄像机切换为2D模式94
5.2构建卡片对象并让它响应单击95
5.2.1从精灵构建对象95
5.2.2鼠标输入代码96
5.2.3当单击时显示卡片96
5.3显示不同的卡片图像97
5.3.1通过程序加载图像97
5.3.2通过不可见的SceneController来设置图像98
5.3.3实例化一个网格的卡片100
5.3.4打乱卡片101
5.4实现匹配和匹配得分103
5.4.1保存并比较翻开的卡片104
5.4.2隐藏错误卡片104
5.4.3显示积分的文本105
5.5重启按钮106
5.5.1使用SendMessage编写UIButton组件107
5.5.2从SceneController中调用LoadLevel109
5.6小结110
第6章在3D游戏中放置2D图形用户界面111
6.1在开始写代码之前……112
6.1.1直接模式GUI还是高级2D界面112
6.1.2规划布局113
6.1.3导入UI图像114
6.2设置GUI显示114
6.2.1为界面创建画布115
6.2.2按钮、图像和文本标签116
6.2.3控制UI元素的位置118
6.3编写UI中的交互119
6.3.1编写不可见的UIController120
6.3.2创建弹出窗口121
6.3.3使用滑动条和输入域设置值124
6.4通过响应事件更新游戏126
6.4.1集成事件系统127
6.4.2从场景中广播和侦听事件127
6.4.3从HUD广播和侦听事件128
6.5小结130
第7章创建第三人称3D游戏:玩家移动和动画131
7.1调整摄像机视图为第三人称视角133
7.1.1导入一个用于观察的角色133
7.1.2将阴影添加到场景134
7.1.3摄像机环绕玩家角色135
7.2编写程序控制camera-relative的移动137
7.2.1旋转角色,以朝向移动方向138
7.2.2朝着方向向前移动140
7.3实现跳跃动作141
7.3.1应用垂直速度和加速度142
7.3.2修改地面检测来处理边缘和斜坡143
7.4设置玩家角色上的动画146
7.4.1在导入的模型上定义动画剪辑148
7.4.2为动画创建动画控制器149
7.4.3编写操作Animator组件的代码153
7.5小结154
第8章在游戏中添加交互设施和物件155
8.1创建门和其他设施156
8.1.1由按键控制开/关的门156
8.1.2在开门之前检查距离和朝向157
8.1.3创建一个变色监控器159
8.2通过碰撞与对象交互160
8.2.1和具有物理功能的障碍物碰撞160
8.2.2用一个压力板来触发门161
8.2.3收集当前关卡游戏中分散的物件163
8.3管理仓库数据和游戏状态165
8.3.1设置玩家和仓库管理器165
8.3.2编程实现游戏管理器166
8.3.3把物品存储在集合对象中:List与Dictionary170
8.4使用和装备物品的仓库UI173
8.4.1在UI中显示仓库物品173
8.4.2装备一个用来开门的钥匙175
8.4.3通过使用血量包来恢复玩家的血量177
8.5小结178
第Ⅲ部分冲刺阶段
第9章将游戏连接到互联网181
9.1创建户外场景182
9.1.1使用天空盒生成天空视觉效果182
9.1.2通过代码设置大气环境183
9.2从互联网服务下载天气数据185
9.2.1使用协程请求WWW数据188
9.2.2解析XML192
9.2.3解析JSON193
9.2.4基于天气数据影响场景195
9.3添加一个网络布告栏196
9.3.1从互联网加载图像196
9.3.2在布告栏上显示图像199
9.3.3缓存下载的图像以供重用200
9.4将数据发送到Web服务器201
9.4.1跟踪当前的天气:发送post请求202
9.4.2PHP中的服务器端代码204
9.5小结204
第10章播放音频:音效和音乐205
10.1导入音效206
10.1.1所支持的文件格式206
10.1.2导入音频文件207
10.2播放音效208
10.2.1音频剪辑、音源和声音侦听器208
10.2.2设定一个循环声音209
10.2.3从代码触发音效210
10.3音频控制接口211
10.3.1建立中心AudioManager212
10.3.2音量控制UI214
10.3.3播放UI声音217
10.4背景音乐218
10.4.1播放循环音乐218
10.4.2独立控制音乐的音量221
10.4.3歌曲间的淡入淡出223
10.5小结226
第11章将各部分整合为一个完整的游戏227
11.1再次利用项目来构建角色扮演RPG228
11.1.1将多个项目的资源和代码装配在一起228
11.1.2编写指向-单击的控件:移动和设备231
11.1.3使用新界面替换旧GUI235
11.2开发总体的游戏结构241
11.2.1控制任务流和多关卡242
11.2.2通过到达退出条件完成一个关卡245
11.2.3当被敌人捕捉时关卡失败247
11.3处理玩家游戏过程中的进度249
11.3.1保存并加载玩家进度249
11.3.2通过完成三个关卡打败游戏253
11.4小结255
第12章将游戏部署到玩家的设备255
12.1构建桌面环境:Windows、Mac和Linux259
12.1.1构建应用259
12.1.2调整PlayerSettings:设置游戏的名称和图标260
12.1.3平台依赖的编译261
12.2为Web构建游戏262
12.2.1UnityPlayer和HTML/WebGL262
12.2.2构建Unity文件和一个测试Web页面262
12.2.3与浏览器中的JavaScript通信263
12.3构建移动应用的平台:iOS和Android264
12.3.1设置构建工具265
12.3.2贴图压缩268
12.3.3开发插件269
12.4小结277
附录A场景导航和键盘快捷键279
A.1使用鼠标进行场景导航279
A.2一般使用键盘快捷键280
附录B与Unity一同使用的外部工具281
B.1编程工具281
B.1.1VisualStudio281
B.1.2Xcode281
B.1.3AndroidSDK282
B.1.4SVN、Git或Mercurial282
B.23D美术应用282
B.2.1Maya282
B.2.23dsMax282
B.2.3Blender283
B.32D图像编辑器283
B.3.1Photoshop283
B.3.2GIMP283
B.3.3TexturePacker283
B.4音频软件283
B.4.1ProTools284
B.4.2Audacity284
附录C在Blender中建模一个板凳285
C.1构建网格几何体285
C.2模型贴图映射288
附录D在线学习资源293
D.1附加的指南293
D.2代码库294
后序297
4. Unity 3D人工智能编程 #
前 言第1章 人工智能导论 1
1.1 人工智能 1
1.2 游戏中的人工智能 2
1.3 人工智能技术 3
1.3.1 有限状态机 3
1.3.2 人工智能中的随机性和概率 5
1.3.3 感应器系统 6
1.3.4 群组、蜂拥和羊群效应 7
1.3.5 路径跟随和引导 8
1.3.6 A*寻路算法 9
1.3.7 导航网格 16
1.3.8 行为树 18
1.3.9 运动 20
1.3.10 Dijkstra算法 23
1.4 本章小结 23
第2章 有限状态机 24
2.1 玩家的坦克 24
2.1.1 PlayerTankController类 25
2.1.2 初始化 26
2.2 子弹类 29
2.3 设置航点 31
2.4 抽象有限状态机类 32
2.5 敌方坦克的人工智能 34
2.5.1 巡逻状态 36
2.5.2 追逐状态 38
2.5.3 攻击状态 38
2.5.4 死亡状态 40
2.6 使用有限状态机框架 42
2.6.1 AdvanceFSM类 42
2.6.2 FSMState类 43
2.6.3 状态类 44
2.6.4 NPCTankController 类 46
2.7 本章小结 48
第3章 随机性和概率 49
3.1 随机性 50
3.2 概率的定义 52
3.2.1 独立与关联事件 53
3.2.2 条件概率 53
3.3 人物个性 56
3.4 有限状态机和概率 57
3.5 动态人工智能 59
3.6 示例老虎机 60
3.6.1 随机老虎机 60
3.6.2 加权概率 63
3.7 本章小结 68
第4章 感应器的实现 70
4.1 基本的感觉系统 71
4.2 场景设置 72
4.3 玩家的坦克与切面 73
4.3.1 玩家的坦克 74
4.3.2 切面 75
4.4 人工智能角色 76
4.4.1 感观 77
4.4.2 视觉 78
4.4.3 触觉 80
4.5 测试 82
4.6 本章小结 83
第5章 群组行为 84
5.1 岛屿示例中的群组行为 84
5.1.1 个体的行为 85
5.1.2 控制器 90
5.2 替代实现 92
5.3 本章小结 99
第6章 路径跟随和引导行为 100
6.1 跟随一条路径 100
6.1.1 路径脚本 102
6.1.2 路径跟随 103
6.2 避开障碍物 106
6.2.1 添加定制图层 107
6.2.2 避开障碍 108
6.3 本章小结 113
第7章 A*寻路算法 114
7.1 回顾A*寻路算法 114
7.2 实现 116
7.2.1 Node 116
7.2.2 PriorityQueue 117
7.2.3 GridManager 118
7.2.4 AStar 123
7.2.5 TestCode类 126
7.3 场景设置 128
7.4 测试 131
7.5 本章小结 132
第8章 导航网格 133
8.1 简介 134
8.2 设置地图 134
8.2.1 Navigation Static 135
8.2.2 烘焙导航网格 135
8.2.3 导航网格代理 136
8.3 有斜坡的场景 139
8.4 NavMeshLayers 141
8.5 分离网格链接 144
8.5.1 生成分离网格链接 145
8.5.2 手动生成分离网格链接 146
8.6 本章小结 148
第9章 行为树 149
9.1 Behave插件 149
9.2 工作流 151
9.3 行为节点 153
9.4 与脚本的接口 155
9.5 装饰节点 158
9.6 Behave调试器 160
9.7 顺序节点 160
9.8 探索Behave的结果 162
9.9 选择节点 163
9.10 优先级选择节点 166
9.11 并行节点 168
9.12 引用 169
9.13 机器人与外星人项目 170
9.14 本章小结 173
第10章 融会贯通 174
10.1 场景设置 175
10.2 车辆 177
10.2.1 玩家控制的车辆 178
10.2.2 人工智能车辆控制器 180
10.2.3 有限状态机 182
10.3 武器 187
10.3.1 枪 187
10.3.2 子弹 189
10.3.3 发射器 191
10.3.4 导弹 193
10.4 本章小结 195
5. Unity官方案例精讲 #
第 1 章 C# 脚本编程基础 ………………. 11.1 配置脚本开发环境 ………………………………..2
1.1.1 配置 Visual Studio …………………….2
1.1.2 配置MonoDevelop ……………………6
1.1.3 脚本的创建 ……………………………..8
1.2 变量、数组与函数 ………………………………..9
1.2.1 变量的声明与使用 ……………………9
1.2.2 数组的声明与使用 ………………….11
1.2.3 函数的声明与使用 ………………….12
1.3 语句、表达式与运算符 ……………………. 14
1.3.1 语句 ……………………………………….14
1.3.2 表达式 ……………………………………16
1.3.3 运算符 ……………………………………16
1.4 协程(Coroutine) ………………………………. 18
1.5 类与类的使用 ……………………………………… 21
1.6 输出调试信息 ……………………………………… 22
1.7 C# 脚本示例 ………………………………………… 22
1.8 Unity 脚本事件执行顺序 ………………….. 26
1.9 脚本模板与脚本编码 ………………………… 28
1.10 Unity 5 脚本升级 ……………………………… 29
第 2 章 JavaScript 脚本编程基础 ….. 31
2.1 JavaScript 脚本编程基础 ………………….. 32
2.2 变量、数组与函数 …………………………….. 32
2.2.1 变量 ……………………………………….32
2.2.2 数组 ……………………………………….33
2.2.3 函数 ……………………………………….35
2.3 表达式、语句与运算符 ……………………. 37
2.4 JavaScript 脚本示例 …………………………… 39
2.5 JavaScript 脚本与 C# 脚本的交互 …… 41
第 3 章星际航行游戏——JSpace Shooter ……………… 45
3.1 导入模型、贴图和材质 ……………………. 46
3.1.1 导入资源包文件 ……………………..46
3.1.2 创建飞船对象 …………………………49
3.1.3 设置摄像机参数 ……………………..50
3.1.4 添加图片背景 …………………………50
3.1.5 添加粒子背景效果 ………………….52
3.2 编写脚本代码 ……………………………………… 53
3.2.1 键盘控制飞船移动 ………………….53
3.2.2 实现射击行为(Shot) …………….57
3.2.3 添加小行星(Asteroid) …………..61
3.3 添加音频 ……………………………………………… 69
3.3.1 添加碰撞爆炸音频 ………………….69
3.3.2 添加飞船射击音频 ………………….69
3.3.3 添加背景音效 …………………………70
3.4 添加计分文本 ……………………………………… 71
3.4.1 添加计分 Text 组件 …………………71
3.4.2 添加计分功能 …………………………72
3.5 游戏结束与重新开始 ………………………… 74
3.5.1 添加游戏结束的 Text 组件 ………74
3.5.2 添加结束游戏的功能 ………………75
3.5.3 添加重新开始的 Text 组件 ………76
3.5.4 添加重新开始游戏的功能 ……….77
第 4 章潜行游戏——Stealth ……….. 79
4.1 加载场景 …………………………………………… 80
4.1.1 创建场景 ………………………………..80
4.1.2 添加场景元素 …………………………80
4.1.3 添加灯光 ………………………………..82
4.1.4 烘焙场景Lightmaps ………………..84
4.1.5 添加 Tag 管理类 ……………………..87
4.1.6 添加转场效果 …………………………87
4.1.7 添加游戏控制器GameController ……………………….89
4.1.8 添加 CCTV Camera …………………92
4.1.9 添加 Laser Grid ……………………….94
4.2 导入和配置人物角色 ………………………… 97
4.2.1 导入角色模型 …………………………97
4.2.2 设置角色动画 …………………………98
4.2.3 创建动画参数管理类 ………………99
4.2.4 添加控制角色运动功能 …………101
4.2.5 添加控制摄像机跟随的功能 ….104
4.3 主角与环境交互 ………………………………..107
4.3.1 添加控制开关台的功能 …………107
4.3.2 添加管理房间钥匙卡的功能 ….110
4.3.3 添加控制单开门的功能 …………112
4.3.4 添加控制双开门的功能 …………115
4.4 主角与敌人交互 ………………………………..116
4.4.1 添加管理角色生命值的功能 ….116
4.4.2 添加敌人角色模型 ………………..118
4.4.3 添加敌人自动搜索角色的功能 …………………………120
4.4.4 添加控制敌人运动功能 …………123
4.4.5 添加控制敌人射击的功能 ……..126
第 5 章粒子碰撞回调功能——Particle Callbacks ………….. 129
5.1 Shuriken 粒子系统介绍 ……………………130
5.2 加载场景 …………………………………………….131
5.3 创建粒子效果 …………………………………….134
5.3.1 创建燃烧时冒烟的粒子效果 …..134
5.3.2 创建燃烧时火星四溅的粒子效果 ………………………….139
5.3.3 火焰大小控制 ……………………….140
5.3.4 创建洒水的粒子效果 …………….143
5.3.5 控制洒水位置 ……………………….146
5.4 碰撞回调函数解析 ……………………………148
5.5 粒子碰撞回调函数应用案例 …………..153
5.5.1 水滴与桶盖碰撞的处理 …………153
5.5.2 实现水滴与燃烧桶碰撞熄灭火焰的效果 …………………….155
第 6 章Mecanim动画系统介绍——Mecanim Example Scenes ….. 159
6.1 Mecanim动画系统简介 …………………..160
6.1.1 Mecanim动画系统的工作流 ….160
6.1.2 Mecanim动画系统中的术语 ….160
6. Unity Shader入门精要 #
第1篇 基础篇第1章 欢迎来到Shader的世界 2
1.1 程序员的三大浪漫 2
1.2 本书结构 3
第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 顶点着色器 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 总结 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
第3章 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 最聪明的孩子:顶点/片元着
色器 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
第4章 学习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 顶点的坐标空间变换过程 72
4.6.4 模型空间 73
4.6.5 世界空间 73
4.6.6 观察空间 75
4.6.7 裁剪空间 77
4.6.8 屏幕空间 83
4.6.9 总结 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
第2篇 初级篇
第5章 开始Unity Shader学习之旅 100
5.1 本书使用的软件和环境 100
5.2 一个最简单的顶点/片元着色器 100
5.2.1 顶点/片元着色器的基本
结构 101
5.2.2 模型数据从哪里来 103
5.2.3 顶点着色器和片元着色器之间如何通信 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
第6章 Unity中的基础光照 121
6.1 我们是如何看到这个世界的 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 逐像素还是逐顶点 125
6.2.6 总结 125
6.3 Unity中的环境光和自发光 126
6.4 在Unity Shader中实现漫反射光照
模型 126
6.4.1 实践:逐顶点光照 126
6.4.2 实践:逐像素光照 129
6.4.3 半兰伯特模型 130
6.5 在Unity Shader中实现高光反射
光照模型 131
6.5.1 实践:逐顶点光照 132
6.5.2 实践:逐像素光照 134
6.5.3 Blinn-Phong光照模型 135
6.6 召唤神龙:使用Unity内置的
函数 136
第7章 基础纹理 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
第8章 透明效果 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
第3篇 中级篇
第9章 更复杂的光照 180
9.1 Unity的渲染路径 180
9.1.1 前向渲染路径 182
9.1.2 顶点照明渲染路径 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
第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
第11章 让画面动起来 230
11.1 Unity Shader中的内置变量
(时间篇) 230
11.2 纹理动画 230
11.2.1 序列帧动画 230
11.2.2 滚动的背景 233
11.3 顶点动画 234
11.3.1 流动的河流 234
11.3.2 广告牌 236
11.3.3 注意事项 239
第4篇 高级篇
第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
第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 重建世界坐标 276
13.3.2 雾的计算 278
13.3.3 实现 278
13.4 再谈边缘检测 283
13.5 扩展阅读 287
第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
第15章 使用噪声 298
15.1 消融效果 298
15.2 水波效果 302
15.3 再谈全局雾效 305
15.4 扩展阅读 309
15.5 参考文献 309
第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 减少需要处理的顶点数目 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
第5篇 扩展篇
第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
第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
第19章 Unity 5更新了什么 365
19.1 场景“更亮了” 365
19.2 表面着色器更容易“报错了” 365
19.3 当家做主:自己控制非统一缩放的
网格 366
19.4 固定管线着色器逐渐退出舞台 366
第20章 还有更多内容吗 368
20.1 如果你想深入了解渲染的话 368
20.2 世界那么大 369
20.3 参考文献 369
End.
Note by HF.
相关文章推荐
- Unity 自学与进阶必会目录
- 【JAVA开发技术进阶】 Java实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)
- java程序员菜鸟进阶(十四)linux基础入门(二)linux文件及目录命令管理
- 【Android进阶】嵌套TabHost (TabHost中放TabHost,类似二级目录、二级树)
- 【Android进阶】嵌套TabHost (TabHost中放TabHost,类似二级目录、二级树)
- 【Android进阶】嵌套TabHost (TabHost中放TabHost,类似二级目录、二级树)
- 自学python之——os.walk 查找目录下的文件
- Java自学之道目录
- 自学python之——os.walk 查找目录下的文件
- 【转】vi/vim使用进阶: 目录
- EXTJS4自学手册——EXT文件目录,本地加载文档,命名规范
- 自学python之——os.walk 查找目录下的文件
- Jenkins进阶系列之——07更改Jenkins的主目录
- 如何从业余爱好者自学进阶成专业开发者
- [Python进阶-7]文件和目录的IO操作,以及json序列化和反序列化
- 自学JS之切换图片进阶篇章
- 服务端技术进阶(五)分布式系统解决之道:目录、消息队列、事务系统及其他
- Linux 命令图解5分钟系列[2] - 文件操作及目录操作进阶
- linux 自学系列:chown 目录权限设置
- 自学Linux Shell3.2-切换目录命令cd