第1章 设置Unity开发环境 1
1.1 欢迎屏幕 1
1.2 Unity界面 2
1.2.1 菜单 2
1.2.2 工具栏 9
1.2.3 Hierarchy 10
1.2.4 Inspector 10
1.2.5 Project Browser 11
1.2.6 Scene View 12
1.2.7 Game View 13
1.3 小结 13
1.4 练习 14
第2章 了解资产创作 15
2.1 文件格式 15
2.1.1 3D格式 15
2.1.2 2D格式 16
2.2 导入资产 16
2.2.1 从Unity内部导入 16
2.2.2 从文件浏览器导入预制资产 17
2.2.3 创建新资产 17
2.3 导入包 18
2.3.1 Unity包 18
2.3.2 定制包 18
2.4 GameObject 19
2.4.1 第一个GameObject 20
2.4.2 创建GameObject 21
2.5 组件 22
2.5.1 创建组件 23
2.5.2 分配组件 23
2.5.3 预设 24
2.6 小结 24
2.7 练习 25
第3章 创建2D精灵 27
3.1 在2D模式下工作 27
3.1.1 2D行为 28
3.1.2 2D工作区 28
3.2 创建精灵 29
3.2.1 Import Settings 29
3.2.2 Pixels To Units 30
3.2.3 Sprite Editor 30
3.3 精灵打包 32
3.3.1 Packing Tag 33
3.3.2 Sprite Packer 33
3.3.3 额外的Sprite Packing资源 34
3.4 小结 34
3.5 练习 35
第4章 构建游戏世界 37
4.1 关卡设计入门 37
4.1.1 设置场景 37
4.1.2 创建路线图 38
4.1.3 添加细节 39
4.2 四处逛逛我们的场景 39
4.2.1 Scene Gizmo 40
4.2.2 透视与等距 40
4.2.3 摄像机控制 40
4.3 在Unity中操纵对象 41
4.3.1 变换工具 42
4.3.2 Z深度 43
4.3.3 设置 45
4.4 我们的第一个关卡 45
4.4.1 手动定位GameObject 46
4.4.2 使用Snap Settings放置GameObject 47
4.4.3 使用Grid Snapping放置GameObject 47
4.4.4 高效关卡设计 48
4.4.5 添加排序元素 48
4.5 继续 50
4.6 小结 50
4.7 练习 51
第5章 运动和玩家控制基础 53
5.1 在Unity3D中编码 53
5.1.1 3种语言 53
5.1.2 选择“正确”的语言 54
5.2 使玩家动起来 54
5.2.1 处理运动的不同方式 54
5.2.2 创建和挂接PlayerController 56
5.3 设置基本的跟随摄像机 63
5.4 介绍Input Manager 63
5.5 错误处理和调试 65
5.5.1 处理异常 65
5.5.2 Try-Catch-Finally——优雅地处理异常 66
5.5.3 Debug.Log() 68
5.5.4 使用断点暂停代码执行 68
5.6 小结 71
5.7 练习 71
第6章 为场景添加动画 73
6.1 动画的一些规则 73
6.1.1 动画原则 73
6.1.2 2D与3D动画 74
6.1.3 变换与帧动画 74
6.1.4 脚本动画 75
6.1.5 导入动画 76
6.2 创建动画 76
6.2.1 动画组件 77
6.2.2 动画剪辑 77
6.2.3 Animation窗口 78
6.2.4 动画事件 82
6.3 动画状态 83
6.3.1 动画器控制器 83
6.3.2 动画器组件 84
6.3.3 Animator窗口 84
6.3.4 编辑玩家控制器 86
6.4 使用状态机 89
6.4.1 转换 89
6.4.2 任意状态 90
6.4.3 混合树 90
6.5 小结 90
6.6 练习 90
第7章 设置玩家物理和碰撞器 93
7.1 了解物理学 93
7.1.1 质量 93
7.1.2 重力 94
7.1.3 力 94
7.2 2D与3D 94
7.2.1 6DoF 94
7.2.2 Z深度 94
7.2.3 旋转 95
7.3 Physics 2D Settings 95
7.3.1 通用物理设置 95
7.3.2 图层碰撞矩阵 96
7.4 刚体 97
7.5 碰撞器 98
7.5.1 Circle Collider 98
7.5.2 Box Collider 99
7.5.3 Edge Collider 99
7.5.4 Polygon Collider 99
7.6 物理材质 100
7.7 约束 101
7.8 小结 105
7.9 练习 105
第8章 创建和应用玩法系统 107
8.1 Unity的触发器体(Trigger Volume) 107
8.1.1 Trigger2D函数 107
8.1.2 为GameObject添加触发器组件 108
8.2 创建检查点 108
8.2.1 为Checkpoint Component编写脚本 108
8.2.2 调整检查点触发器的尺寸和位置 109
8.3 使用检查点与重生 111
8.3.1 准备Pit触发器体(Trigger Volume) 111
8.3.2 为Pit触发器组件编写脚本 112
8.4 创建收集物品 114
8.4.1 为收集物品准备浮动硬币预设 115
8.4.2 为CoinPickup组件编写脚本 115
8.4.3 为收集物品准备弹出硬币预设 116
8.4.4 准备硬币盒预设 117
8.4.5 为硬币盒组件编写脚本 119
8.4.6 为CoinSpawner组件编写脚本 120
8.4.7 整合游戏 121
8.4.8 少许优化 122
8.5 跟踪玩家的统计 123
8.6 小结 125
8.7 练习 125
第9章 创建危险和困难 127
9.1 创建第一个敌人 127
9.1.1 准备Slime敌人GameObject 127
9.1.2 继承和EnemyController组件 128
9.1.3 为敌人Slime组件编写脚本 129
9.1.4 为关卡添加墙壁 131
9.1.5 处理与其他Slime的碰撞 132
9.1.6 为Slime添加动画 133
9.2 处理伤害 134
9.2.1 在PlayerStats组件编写脚本伤害 134
9.2.2 创建伤害触发器 135
9.2.3 穿过玩家的空间 136
9.2.4 为Pit添加伤害 137
9.2.5 添加受到伤害后暂时免疫 138
9.2.6 免疫视觉表现,古典办法 140
9.3 处理玩家死亡 142
9.4 扩展平台 143
9.4.1 准备移动平台预设 143
9.4.2 编写Flight Point组件脚本 144
9.5 创建第二种敌人 146
9.5.1 准备Fly敌人GameObject 146
9.5.2 将动画添加到Fly 147
9.5.3 编写FlyController组件的脚本 148
9.5.4 调整FlightPoints脚本 149
9.6 维护敌人部署 150
9.6.1 准备出生触发器 151
9.6.2 编写出生触发器组件的脚本 151
9.7 浅谈挑战 153
9.8 小结 153
9.9 练习 153
第10章 创建菜单和界面元素 155
10.1 UI设计 155
10.1.1 diegetic 155
10.1.2 non-diegetic 156
10.1.3 meta 156
10.1.4 spatial 156
10.2 Unity原生(Native)GUI 156
10.2.1 GUI Style(样式) 157
10.2.2 GUI Skin 157
10.2.3 GUI控件 158
10.2.4 Compound Controls(复合控件) 158
10.2.5 GUI Class 158
10.2.6 GUI Layout 159
10.2.7 GUI Text 159
10.2.8 GUI Texture 159
10.3 创建闪屏 160
10.4 标题屏幕 161
10.5 游戏结束屏幕 162
10.6 游戏胜利屏幕 163
10.7 HUD 164
10.7.1 创建视觉 165
10.7.2 创建脚本 166
10.8 小结 172
10.9 练习 172
第11章 为GameObjects应用效果 173
11.1 Shuriken粒子系统介绍 173
11.1.1 术语解析 173
11.1.2 创建粒子系统 174
11.2 粒子系统的模块和属性 175
11.2.1 粒子系统基本属性 175
11.2.2 其他粒子系统模块 176
11.2.3 粒子系统曲线 176
11.3 给游戏添加粒子特效 177
11.3.1 为硬币箱创建粒子特效 177
11.3.2 连接硬币箱粒子特效 179
11.3.3 为伤害创造粒子特效 180
11.3.4 通过代码调用Damage Particle System 182
11.3.5 粒子小乐趣 183
11.4 Unity的音频系统 183
11.4.1 音频源组件 184
11.4.2 音频监听器组件 185
11.4.3 音频混响区组件 186
11.5 为玩家添加声音 186
11.5.1 为行走循环添加脚步声 186
11.5.2 为跳跃事件添加声音 188
11.5.3 为伤害事件添加声音 189
11.6 为收集系统添加声音 191
11.6.1 为硬币箱使用音效 191
11.6.2 为收集硬币添加声音 191
11.7 应用些许优化 192
11.7.1 改进摄像机 192
11.7.2 改进玩家死亡 195
11.8 小结 199
11.9 练习 199
第12章 组织和优化 201
12.1 组织资产 201
12.1.1 组织预设 202
12.1.2 标签 202
12.1.3 层次 203
12.2 组织脚本和代码 205
12.2.1 组织脚本文件 206
12.2.2 组织代码 206
12.3 优化 213
12.3.1 预设 213
12.3.2 物理学 214
12.3.3 绘制调用 215
12.3.4 三角形数量 216
12.3.5 批处理 217
12.3.6 Rendering Statistics窗口 217
12.4 小结 218
12.5 练习 218
第13章 整合所有内容 221
13.1 把关卡连接在一起 221
13.1.1 准备胜利触发器预设 221
13.1.2 创建胜利触发器脚本 223
13.1.3 获取硬币值 225
13.2 连接“介绍”屏幕 226
13.3 赢或输:重回游戏 228
13.3.1 从游戏结束恢复 228
13.3.2 胜利后从头开始 230
13.4 生成和部署游戏 231
13.4.1 Web Player的Build Settings 232
13.4.2 PC、Mac和Linux Build Settings 232
13.4.3 跨平台播放器的设置 233
13.4.4 Web Player的Player Settings 233
13.4.5 正确设置游戏 234
13.4.6 生成Web Player的游戏 235
13.4.7 将游戏部署到Web 235
13.4.8 部署后 235
13.5 前进 236
13.5.1 打磨游戏的注意事项 236
13.5.2 货币化 236
13.6 最后的话 238
第14章 UGUI 241
14.1 UGUI组件 241
14.2 创建示例界面 242
14.2.1 Canvas组件 243
14.2.2 Rect Transform 245
14.2.3 UI Rect工具 247
14.2.4 添加Mask组件 248
14.2.5 Event System和事件触发器 248
14.3 小结 249
附录 JavaScript代码示例 251
玩家脚本 251
收集脚本 257
敌人脚本 258
游戏系统脚本 260
GUI脚本 263
危险脚本 268
系统脚本 270