本书是国家级一流本科专业(数字媒体技术)课程“游戏开发基础”的指定教材,同时被列为浙江省普通本科高校“十四五”重点立项建设教材。本书以Unity游戏引擎为平台,详细阐述了12款经典游戏的实现方法,这些游戏包括《打地鼠》、《记忆翻牌》、《拼图》、《推箱子》、《俄罗斯方块》、《华容道》、《连连看》、《三消》、《扫雷》、《贪吃蛇》、《五子棋》和《跳棋》。通过本书的学习和实践,读者能够全面理解和掌握游戏开发的核心算法,同时深刻领悟数据结构等基础知识在游戏开发中的实际应用,培养全面的工程思维。通过学习本书内容,读者不仅能够熟练掌握游戏引擎的运用,更能够灵活运用数据结构、数学思路等理论知识进行游戏创作。本书既适合作为各院校相关专业的教材,又适合作为对游戏开发感兴趣的读者的参考书。
浙江传媒学院数字媒体技术专业主任,数字媒体与网络工程系副主任(主持工作),教师。澳门科技大学人文艺术学院博士。Unity价值专家,Unity全球认证讲师。中国大学生计算机设计大赛省级赛和国赛评委,全国高等院校计算机基础教育研究会文科专委会委员,浙江省电子竞技协会副秘书长,中国文化管理协会电子竞技工作委员会委员,全国高等院校计算机基础教育研究会网络科技与智能媒体设计专业委员会委员。主讲课程“游戏开发基础”获浙江省本科院校“互联网+教学”示范课堂;配套大规模在线开放课程“一刻钟学会:游戏开发基础”(“中国大学MOOC”平台)获浙江省省级线上一流课程,并被Unity官方中文课堂收录。《游戏开发基础——基于Unity游戏引擎》被列为浙江省普通本科高校“十四五”重点立项建设教材。曾获第三届全国高校数字创意教学技能大赛一等奖,浙江传媒学院“教学十佳”,“课程思政”微课比赛一等奖,以及智慧精彩一堂课一等奖等。主要研究方向:数字娱乐技术、人机交互技术、技术美术和人工智能等。
第1章 游戏引擎介绍 1
1.1 多平台发布的Unity 1
1.2 Unity的下载和安装 1
1.2.1 下载Unity 2
1.2.2 安装Unity 2
1.2.3 注册Unity 4
1.2.4 启动Unity 4
1.3 Unity编辑器的布局 5
1.3.1 标题栏 5
1.3.2 主菜单栏 6
1.3.3 Project(项目资源)窗口 13
1.3.4 Hierarchy(层级)窗口 19
1.3.5 Scene(场景)窗口 21
1.3.6 Inspector(组件)窗口 30
1.3.7 Game(游戏预览)窗口 35
1.3.8 Console(控制台)窗口 36
1.4 自定义窗口布局 37
1.4.1 使用Unity内置的窗口
布局功能 37
1.4.2 自由设定窗口布局 39
1.5 本章小结 40
1.6 练习题 40
第2章 打地鼠 41
2.1 游戏简介 41
2.2 游戏规则 41
2.3 游戏开发核心思路 41
2.3.1 洞口位置的存储结构和计算 41
2.3.2 地鼠出现频率的控制 42
2.3.3 地鼠的随机生成和销毁 42
2.3.4 游戏时长和分数 42
2.3.5 游戏流程图 43
2.4 游戏实现 43
2.4.1 资源的导入与Sorting Layer 43
2.4.2 生成洞口 45
2.4.3 地鼠的生成 46
2.4.4 打击地鼠 49
2.4.5 计时功能 50
2.4.6 计分功能 52
2.4.7 游戏结束 53
2.4.8 修改地鼠出现频率 53
2.4.9 修改图标 54
2.4.10 添加音效 55
2.4.11 重新开始游戏 56
2.4.12 导出游戏 56
2.5 本章小结 57
2.6 练习题 57
第3章 记忆翻牌 58
3.1 游戏简介 58
3.2 游戏规则 58
3.3 游戏开发核心思路 58
3.3.1 生成卡牌池 58
3.3.2 洗牌 59
3.3.3 卡牌状态 60
3.3.4 游戏计分 60
3.3.5 游戏流程图 61
3.4 游戏实现 61
3.4.1 游戏资源的导入与场景搭建 61
3.4.2 卡牌的位置排列 62
3.4.3 洗牌功能的实现 63
3.4.4 显示卡牌的背面与
卡牌的图案 64
3.4.5 设置卡牌状态 66
3.4.6 卡牌图案的配对 67
3.4.7 计算分数与步数 69
3.5 本章小结 72
3.6 练习题 72
第4章 拼图 73
4.1 游戏简介 73
4.2 游戏规则 73
4.3 游戏开发核心思路 73
4.3.1 碎片对象的生成与位置初始化 73
4.3.2 原图与碎片位置的对应关系 73
4.3.3 拖动碎片 74
4.3.4 碎片放置位置正确性的判断 75
4.3.5 游戏流程图 76
4.4 游戏实现 76
4.4.1 新建工程与导入资源 76
4.4.2 批量读取碎片 78
4.4.3 生成碎片对象 79
4.4.4 初始化碎片位置 79
4.4.5 计算每个碎片的目标位置 80
4.4.6 拖动鼠标 81
4.4.7 判断游戏是否胜利 86
4.5 本章小结 87
4.6 练习题 87
第5章 推箱子 88
5.1 游戏简介 88
5.2 游戏规则 88
5.3 游戏开发核心思路 89
5.3.1 地图的生成 89
5.3.2 角色位置及移动方向与数组的对应关系 89
5.3.3 分析角色可移动和不可移动情况 90
5.3.4 角色移动的代码逻辑 90
5.3.5 游戏胜利的判定 92
5.3.6 游戏流程图 92
5.4 游戏实现 92
5.4.1 资源的导入与切割 92
5.4.2 角色动画的制作 94
5.4.3 地图生成的程序实现与代码重构 95
5.4.4 角色移动方向位置上的Tile类型检测与实现 97
5.4.5 角色可移动情况的代码框架实现 99
5.4.6 角色在场景中的移动功能 101
5.4.7 打印地图快照信息 102
5.4.8 角色移动与地图快照信息的实时更新 104
5.4.9 推动箱子的功能实现 104
5.4.10 移动代码的重构优化 109
5.4.11 游戏胜利条件判断 112
5.5 本章小结 114
5.6 练习题 114
第6章 俄罗斯方块 115
6.1 游戏简介 115
6.2 游戏规则 115
6.3 游戏开发核心思路 116
6.3.1 初始化地图 116
6.3.2 方块类(Block)的编写 117
6.3.3 初始化方块——方块在地图中的随机生成 117
6.3.4 移动和旋转方块——修改位置坐标 117
6.3.5 移动和旋转方块——边界判断 117
6.3.6 移动方块——向下移动 118
6.3.7 消除满行方块 118
6.3.8 游戏结束判断 118
6.3.9 附加功能——提示下一个方块 118
6.3.10 游戏流程图 118
6.4 游戏实现 119
6.4.1 资源的导入 119
6.4.2 地图的初始化与显示 121
6.4.3 地图快照信息的显示 122
6.4.4 方块的初始化 124
6.4.5 方块的随机生成 128
6.4.6 方块的移动和旋转 130
6.4.7 方块的移动、旋转与地图的刷新 134
6.4.8 边界的判断 138
6.4.9 满行的消除 141
6.4.10 游戏结束的判断 142
6.4.11 附加功能——控制方块 自动下落的速度 144
6.4.12 附加功能——显示下 一个方块的类型 145
6.4.13 附加功能——优化重复 代码 147
6.5 本章小结 149
6.6 练习题 149
第7章 华容道 150
7.1 游戏简介 150
7.2 游戏规则 150
7.3 游戏开发核心思路 151
7.3.1 棋子类(Chess)的编写 151
7.3.2 棋盘盘面布局的生成 151
7.3.3 移动棋子的实现 151
7.3.4 游戏胜利的判断 156
7.3.5 游戏流程图 156
7.4 游戏实现 157
7.4.1 资源的导入 157
7.4.2 棋子类的编写 158
7.4.3 棋盘布局的生成 159
7.4.4 移动棋子——选择棋子 163
7.4.5 移动棋子——移动1×1棋子 169
7.4.6 移动棋子——移动1×2棋子 173
7.4.7 移动棋子——移动2×1棋子 177
7.4.8 移动棋子——移动2×2棋子 181
7.4.9 游戏胜利的判断 184
7.5 本章小结 188
7.6 练习题 188
第8章 连连看 189
8.1 游戏简介 189
8.2 游戏规则 189
8.3 游戏开发核心思路 190
8.3.1 编写Tile类 190
8.3.2 初始化地图 190
8.3.3 消除操作 191
8.3.4 绘制连接线 193
8.4 游戏实现 194
8.4.1 导入资源 194
8.4.2 编写Tile类 196
8.4.3 初始化地图 197
8.4.4 选择Tile对象 202
8.4.5 连接判断——直连、二连、三连 205
8.4.6 连接线的绘制 209
8.5 本章小结 214
8.6 练习题 214
第9章 三消 215
9.1 游戏简介 215
9.2 游戏规则 215
9.3 游戏开发核心思路 216
9.3.1 编写Gemstone类 216
9.3.2 初始化游戏场景和地图 216
9.3.3 消除检测 217
9.3.4 消除宝石 218
9.3.5 重新洗牌 219
9.3.6 游戏流程图 219
9.4 游戏实现 220
9.4.1 导入资源与设置场景 220
9.4.2 编写Gemstone类 221
9.4.3 初始化地图数据结构和场景 223
9.4.4 选择宝石 225
9.4.5 消除宝石 228
9.4.6 重新洗牌操作 233
9.5 本章小结 235
9.6 练习题 235
第10章 扫雷 236
10.1 游戏简介 236
10.2 游戏规则 236
10.2.1 《扫雷》游戏的布局 236
10.2.2 《扫雷》游戏的基本 操作 237
10.3 游戏开发核心思路 237
10.3.1 初始化游戏地图 237
10.3.2 编写Tile类 237
10.3.3 随机生成地雷 238
10.3.4 编写辅助函数,显示 地图信息 238
10.3.5 Tile的交互 238
10.3.6 方格的单击(左键、 遍历翻开、右键) 239
10.3.7 游戏结束判断 239
10.3.8 UI控制 239
10.3.9 游戏流程图 240
10.4 游戏实现 240
10.4.1 资源导入与场景设置 240
10.4.2 初始化场景 241
10.4.3 左、右键操作 248
10.4.4 游戏结束判断 252
10.4.5 UI控制 256
10.4.6 重新开始一局游戏 269
10.5 本章小结 270
10.6 练习题 270
第11章 贪吃蛇 271
11.1 游戏简介 271
11.2 游戏规则 271
11.3 游戏开发核心思路 271
11.3.1 地图的生成 271
11.3.2 食物的出现 272
11.3.3 蛇的数据结构 272
11.3.4 贪吃蛇的移动算法 272
11.3.5 判断蛇头是否撞到了 自身 272
11.3.6 边界的判断 273
11.3.7 游戏流程图 273
11.4 游戏实现 273
11.4.1 资源导入和场景设置 273
11.4.2 编写Node类 275
11.4.3 初始化场景 276
11.4.4 贪吃蛇的移动 280
11.4.5 结束判定 285
11.5 本章小结 286
11.6 练习题 286
第12章 五子棋 287
12.1 游戏简介 287
12.2 游戏规则 287
12.2.1 《五子棋》游戏的 棋盘和棋子 287
12.2.2 《五子棋》游戏的 基本规则 288
12.2.3 落子顺序 288
12.3 游戏开发核心思路 288
12.3.1 绘制棋盘 288
12.3.2 绘制棋子 289
12.3.3 落子 289
12.3.4 获胜规则 289
12.3.5 判断黑方禁手功能 290
12.3.6 游戏流程图 290
12.4 游戏实现 291
12.4.1 前期准备 291
12.4.2 初始化棋盘地图 292
12.4.3 编写落子框架 294
12.4.4 落子 296
12.4.5 连子判断和胜负判断 297
12.5 本章小结 302
12.6 练习题 302
第13章 跳棋 303
13.1 游戏简介 303
13.2 游戏规则 303
13.3 游戏开发核心思路 304
13.3.1 棋盘排列 304
13.3.2 生成棋子 305
13.3.3 棋子在Unity中笛卡儿
坐标系下的位置映射 305
13.3.4 计算可移动位置 306
13.3.5 回合限制 307
13.3.6 游戏胜负判断 307
13.3.7 游戏流程图 307
13.4 游戏实现 308
13.4.1 前期准备 308
13.4.2 创建棋格 310
13.4.3 创建棋子 312
13.4.4 选择棋子 314
13.4.5 判断邻近可走棋格 316
13.4.6 单步移动棋子 319
13.4.7 跳子 320
13.4.8 回合限制 322
13.4.9 胜负判断 324
13.5 本章小结 327
13.6 练习题 327