游戏设计、原型制作、开发,这三方面的技术整合到一本书中,是很多专业游戏开发者的福音。这本书完全集成了游戏设计和计算机编程方面有价值的关键内容。作为跨平台的游戏开发的顶级游戏引擎,Unity可用于开发一个支持Windows,OS X和Linux的应用程序,适用于网页和所有最流行的移动平台。而C则是一个优秀的编程环境,是专业游戏开发者强大的工具。如果你想掌握有关游戏开发与制作的高端技能,你需要具备很强的开发技能和丰富的实践经验,没有捷径,但是,这本书可以帮助你实现愿望。
欢迎阅读本书。笔者有多年游戏设计方面的经验,并在多所大学担任过游戏设计课程的教授,其中包括南加州大学的互动媒体和游戏专业、密歇根大学安娜堡分校的电气工程与计算机科学专业等,本书便是基于本人多年的专业经验编写而成的。
本前言主要介绍本书写作的目的、内容以及本书的使用方法。
本书的写作目的
本书的写作目的非常明确:提供读者成为成功游戏设计师和原型设计师所需要的工具和知识,我尽可能地将所有的相关技能和知识都纳入了本书。与其他教程类的书籍不同的是,本书结合了游戏设计的原则与数字开发(也就是计算机编程)内容,并将两者融入互动原型中。随着性能先进同时又简便易用的游戏开发引擎的出现(比如Unity),原型构建正变得前所未有的简单。而且,学会原型开发也有助于你成为一名更优秀的游戏设计师。
第Ⅰ部分:游戏设计和纸面原型
本书的第Ⅰ部分介绍了游戏设计的不同理论和分析框架,这些内容在早年出版的一些书籍里均有涉及。本部分介绍了一种将这些理论结合并拓展延伸的方法——四元分层法。四元分层法探究了与互动体验设计相关的决策内容。本部分同时含纳了不同游戏设计原则的挑战难度,阐述了纸面原型的设计过程、游戏测试和迭代设计。这些具体的信息和知识将有助于读者成为合格的设计师。
第Ⅱ部分:数字原型
本书的第Ⅱ部分介绍了编程的内容。该部分的编写基于我作为教授多年为零基础的学生授课的经验,我在课堂上也使用这些内容教导学生如何利用数字编程表达自己游戏设计的理念。如果你此前没有学过任何编程或开发的相关知识,也没有任何经验的话,那么本书第Ⅱ部分的内容就是为你量身定做的。如果你此前有过一定的编程经验的话,那么你也可以学到几个编程的小窍门,了解到一些不同的编程方法。
第Ⅲ部分:游戏原型实例和教程
本书的第Ⅲ部分围绕多种迥异的原型教程展开,你能学习到不同类型游戏的开发方法。该部分内容的主要目的是:通过展示不同类型游戏的开发方式,借此展现开发游戏原型的最佳办法,并且这些知识将为你将来的工作打下良好的基础。市场上其他图书的教程多数只介绍一种类型的教程,篇幅长达上百页。相比之下,本书的教程种类繁多,短小精悍。虽然没有那些书籍的单个教程内容详尽,但是我认为学习不同类型的教程更有助于读者将来自己准备项目开发。
第Ⅳ部分:附录
本书包含了一些很重要的附录内容,值得在这里提一下。我将书中多次提及的信息,以及我认为读者阅读后有可能想要再次查阅的内容放在了附录内,因此本书的附录并不是通篇重复的内容,也不需要读者翻阅不同章节寻找。附录A是运用Unity创建游戏项目的步骤。附录B“有用的概念”是篇幅最长的附录,虽然该附录的名字十分平庸,但是我认为你以后会经常来查阅这部分的知识。“有用的概念”里集合了我个人在游戏原型开发上经常使用的技术和策略。附录C囊括了所有有用的网站参考链接。在互联网上想要找到自己需要的信息总是很难,本附录列出的网站则是我经常使用的。
数字原型:Unity
本书提到的所有数字游戏实例均基于游戏引擎Unity和C#语言。我在讲授数字游戏开发和互动体验课程上有十多年的经验,在我看来,目前为止Unity是学习游戏开发的最佳工具,C#语言则最适合原型设计师学习。虽然现在也有一些开发工具不需要使用者具备任何编程技术(比如GameMaker和GameSalad),但是Unity的资源包更灵活多变,并且基本上都是免费的(Unity的免费版本包含付费版本的大多数内容,本书通篇用到的Unity也都是免费版本的)。如果你真的想学习游戏编程,那么Unity是你的最佳选择。
同样,有一些编程语言要比C#语言更容易使用。过去我教过学生ActionScript和JavaScript,但这么长时间以来C#的灵活性和强大的功能一直让我印象深刻。学习C#不仅是学习简单的编程,更是学习编程的方法。JavaScript对使用者在编程时的严谨性要求不高,可我发现这实际上会减慢开发的速度。C#在这方面则要严格得多(通过强类型变量等内容),这不仅有助于使用者成为更出色的程序员,同时也会提升编程速度(比如强类型提供代码自动完成的提示,让使用者更快速、准确的编程)。
本书面向的受众群体
市面上有很多关于游戏设计书籍,也有很多关于编程的图书。本书的宗旨就是填补游戏设计和编程之间的缺口,将两者联系起来。随着像Unity的游戏开发技术趋于成熟,游戏设计师把自己的想法转换为数字原型就变得极为重要。本书能帮助你:
如果你有兴趣致力于游戏设计领域,但是从未学过编程,那么本书是你的最佳选择。第Ⅰ部分介绍了几种不同的游戏设计理论,以及探索设计理念的办法。第Ⅱ部分教授零基础读者学习编程,了解面向对象的类体系。自从我担任大学教授以来,我的课程主要都是教授没有编程学习背景的学生学习游戏编程。我将自己的所有教学经验提炼浓缩至第Ⅱ部分内容中。第Ⅲ部分阐述了不同游戏类型的八种游戏原型开发方法。每一种方法都能快速地把概念转变成数字原型。第Ⅳ部分的附录列举了游戏开发和编程的概念,提供了扩展学习的资源。附录B“有用的概念”里有很多深入探究的内容,接下来的很多年里你也会经常用到这部分内容。
如果你有过编程经验,同时对游戏设计感兴趣,那么本书的第Ⅰ部分和第Ⅲ部分对你最有用。第Ⅰ部分介绍了不同的游戏设计理论和探索设计理念的办法。第二部分介绍了C#语言,以及如何在Unity环境中运用C#,你可以跳过这部分内容。如果你熟悉其他编程语言,那么你就会发现C#和C++很相似,同时带有Java的一些高级功能。第Ⅲ部分阐述了不同游戏类型的八种游戏原型开发方法。用Unity开发游戏和用其他游戏引擎开发截然不同,因为许多元素都是在编程外进行设计的。本书中举出的每一种原型实例都最适合用在Unity上,并且开发速度都很快。你也应该仔细阅读附录B,该附录含纳了不同开发概念的详细信息和内容,值得你翻阅查看。
Jeremy Gibson在密歇根大学安娜堡分校的电气工程与计算机科学专业任教,讲授计算机游戏设计课程,同时也是 ExNinja Interactive有限责任公司的创始人之一。 2009年至 2013年间,担任南加州大学电影艺术学院的互动媒体及游戏专业的助理教授,讲授游戏设计和原型开发课程。在他任职期间,该学院的游戏设计课程在北美地区首屈一指。Jeremy同时担任 IndieCade独立游戏展会的教育和发展主席,负责 IndieX-change和 GameU峰会。自 2009年开始,每年在游戏开发者大会上发表演讲。
Jeremy于 1999年取得了得克萨斯大学奥斯汀分校的广播、电视、电影专业的理学学士学位,于 2007年取得了卡内基梅隆大学娱乐技术专业的硕士学位。 Jeremy曾在 Human Code和 frog design公司担任程序员和原型设计师,曾在 Great Northern Way Campus(温哥华,BC)、得克萨斯州立大学、匹兹堡艺术学院、奥斯汀社区学院、得克萨斯大学奥斯汀分校任教,并曾在迪士尼、Maxis、Electronic Arts和 Pogo.com等公司任职。在攻读研究生期间,Jeremy的团队开发了游戏产品 Skyrates,荣获 2008年独立游戏峰会的 Silver Gleemax奖项。同时 Jeremy也是*一位在哥斯达黎加讲授游戏设计课程的教授。
第I部分 游戏设计和纸质原型
第1章 像设计师一样思考 2
1.1 你是一名游戏设计师 2
1.2 Bartok:游戏练习 2
1.3 游戏的定义 7
1.4 小结 12
第2章 游戏分析框架 14
2.1 游戏学的常用框架 14
2.2 MDA:机制,动态和美学 14
2.3 规则,戏剧和动态元素 17
2.4 四元法 19
2.5 小结 21
第3章 分层四元法 22
3.1 内嵌层 22
3.2 动态层 23
3.3 文化层 24
3.4 设计师的责任 25
3.5 小结 25
第4章 内嵌层 27
4.1 内嵌机制 27
4.2 美学内嵌 31
4.3 叙事内嵌 33
4.4 技术内嵌 39
4.5 小结 40
第5章 动态层 41
5.1 玩家的角色 41
5.2 涌现 42
5.3 动态机制 42
5.4 动态美学 46
5.5 动态叙事 50
5.6 涌现叙事 51
5.7 动态技术 52
5.8 小结 52
第6章 文化层 53
6.1 游戏之外 53
6.2 文化机制 54
6.3 美学文化 55
6.4 叙事文化 55
6.5 技术文化 56
6.6 授权的跨媒体不属于文化层 57
6.7 游戏的文化影响 57
6.8 小结 58
第7章 像一个设计师一样工作 59
7.1 迭代设计 59
7.2 创新 65
7.3 头脑风暴与构思 66
7.4 改变你的想法 68
7.5 规划作品的范围大小 70
7.6 小结 71
第8章 设计目标 72
8.1 设计目标:一个不完整的清单 72
8.2 以设计为中心的目标 73
8.3 以玩家为中心的目标 75
8.4 小结 87
第9章 纸面原型 88
9.1 纸面原型的优势 88
9.2 纸面原型工具 89
9.3 一个纸面原型的例子 90
9.4 纸面原型的优点 97
9.5 纸面原型的缺点 98
9.6 小结 98
第10章 游戏测试 100
10.1 为什么要测试游戏 100
10.2 成为出色的试玩者 101
10.3 试玩者圈子 101
10.4 测试方法 103
10.5 其他重要的测试办法 108
10.6 小结 109
第11章 数学和游戏平衡 110
11.1 游戏平衡的意义 110
11.2 安装Apache OpenOffice Calc 110
11.3 用Calc检查骰子 111
11.4 概率 118
11.5 桌游中的乱数产生技术 121
11.6 加权分布 123
11.7 排列 125
11.8 正负反馈 126
11.9 使用Calc调整武器平衡 127
11.10 小结 132
第12章 谜题设计 133
12.1 谜题无处不在 133
12.2 Scott Kim与谜题设计 133
12.3 动作解谜游戏的几种类型 139
12.4 小结 140
第13章 引导玩家 142
13.1 直接指引 142
13.2 间接指引 144
13.3 介绍新技能和新概念 149
13.4 小结 151
第14章 数字游戏产业 152
14.1 关于游戏产业 152
14.2 游戏教育 155
14.3 走进行业中去 157
14.4 等不及开始做游戏了 160
14.5 小结 161
第II部分 数字原型
第15章 数字化系统中的思维 164
15.1 棋类游戏中的系统思维 164
15.2 简单命令练习 165
15.3 游戏分析:《拾苹果》(Apple Picker) 167
15.4 小结 171
第16章 Unity开发环境简介 172
16.1 下载Unity软件 172
16.2 开发环境简介 173
16.3 首次运行Unity软件 176
16.4 设置Unity的窗口布局 181
16.5 熟悉Unity界面 184
16.6 小结 185
第17章 C#编程语言简介 186
17.1 理解C#的特性 186
17.2 阅读和理解C#语法 190
17.3 小结 193
第18章 HELLO WORLD:你的首个程序 194
18.1 创建新项目 194
18.2 新建C#脚本 196
18.3 让事情更有趣 200
18.4 小结 208
第19章 变量和组件 209
19.1 变量 209
19.2 C#中的强类型变量 209
19.3 重要的C#变量类型 210
19.4 变量的作用域 213
19.5 命名惯例 213
19.6 Unity中的重要变量类型 215
19.7 Unity游戏对象和组件 220
19.8 小结 222
第20章 布尔运算和比较运算符 223
20.1 布尔值 223
20.2 比较运算符 226
20.3 条件语句 229
20.4 小结 234
第21章 循环语句 235
21.1 循环语句的种类 235
21.2 创建项目 235
21.3 while循环 236
21.4 死循环的危害 236
21.5 更实用的while循环 237
21.6 do……while循环 238
21.7 for循环 239
21.8 foreach循环 240
21.9 循环中的跳转语句 241
21.10 小结 243
第22章 List和数组 244
22.1 C#中的集合 244
22.2 List 245
22.3 数组 249
22.4 多维数组 252
22.5 交错数组 255
22.6 应该使用数组还是List 259
22.7 小结 259
第23章 函数与参数 263
23.1 创建函数示例的项目 263
23.2 函数的定义 263
23.3 函数的形式参数和实际参数 266
23.4 函数的返回值 267
23.5 使用合适的函数名称 269
23.6 什么情况下应该使用函数 269
23.7 函数重载 270
23.8 可选参数 271
23.9 params关键字 272
23.10 递归函数 273
23.11 小结 274
第24章 代码调试 276
24.1 如何开始调试 276
24.2 绑定或移除脚本时出现的错误 278
24.3 使用调试器逐语句运行代码 281
24.5 小结 287
第25章 类 289
25.1 理解类 289
25.2 创建Enemy类示例的项目 290
25.3 类的继承 295
25.4 小结 298
第26章 面向对象思维 299
26.1 面向对象的比喻 299
26.2 面向对象的Boids实现方法 301
26.3 小结 310
第27章 敏捷思维 311
27.1 敏捷软件开发宣言 311
27.2 Scrum方法论 312
27.3 小结 319
第III部分 游戏原型示例和教程
第28章 游戏原型1:《拾苹果》 322
28.1 数字化原型的目的 322
28.2 准备工作 323
28.3 开始工作:绘图资源 323
28.4 编写《拾苹果》游戏原型的代码 329
28.5 图形用户界面(GUI)和游戏管理 340
28.6 小结 346
第29章 游戏原型2:《爆破任务》 348
29.1 准备工作:原型2 348
29.2 游戏原型概念 348
29.3 绘图资源 349
29.4 编写游戏原型的代码 354
29.5 小结 380
第30章 游戏原型3:《太空射击》 382
30.1 准备工作:原型3 382
30.2 设置场景 384
30.3 创建主角飞船 385
30.4 添加敌机 397
30.5 随机生成敌机 401
30.6 设置标签、图层和物理规则 403
30.7 使敌机可以消灭主角飞船 405
30.8 重新开始游戏 409
30.9 射击 410
30.10 添加升级道具 421
30.11 解决代码中的竞态条件 428
30.12 让敌机可以掉落升级道具 430
30.13 为其他敌机编程 432
30.14 添加粒子效果和背景 444
30.15 小结 446
第31章 游戏原型4:《矿工接龙》 449
31.1 准备工作:原型4 449
31.2 项目Build设置 450
31.3 将图片导入为Sprite 451
31.4 用Sprite制作纸牌 453
31.5 《矿工接龙》游戏 469
31.6 在代码中实现《矿工接龙》游戏 471
31.7 为游戏添加得分机制 489
31.8 总结 504
第32章 游戏原型5:Bartok 505
32.1 准备工作:原型5 505
32.2 编译设置 507
32.3 Bartok编程 508
32.4 小结 536
第33章 游戏原型6:Word Game 537
33.1 准备工作:Word Game原型 537
33.2 关于Word Game 538
33.3 解析Word List 539
33.4 创建游戏 544
33.5 屏幕布局 549
33.6 添加交互 557
33.7 添加计分 561
33.8 添加动画 564
33.9 添加色彩 567
33.10 小结 569
第34章 游戏原型7:QuickSnap 571
34.1 准备工作:QuickSnap原型 571
34.2 构建场景 572
34.3 游戏编程 579
34.4 小结 598
第35章 游戏原型8:Omega Mage 600
35.1 准备工作:Omega Mage原型 600
35.2 构建场景 602
35.3 法师角色 607
35.4 鼠标交互 609
35.5 移动 613
35.6 物品栏和选择道具 618
35.7 施展火场法术 625
35.8 切换房间 634
35.9 补充敌人 638
35.10 攻击法师 646
35.11 抽象敌人接口 651
35.12 创建EnemyFactory 653
35.13 小结 657
第 IV 部分 附录
附录 A 项目创建标准流程 660
A.1 建立新项目 660
A.2 场景编码就绪 662
附录 B 实用概念 665
B.1 C#和 Unity 代码概念 665
B.2 数学概念 684
B.3 插值 693
B.4 角色扮演游戏 706
B.5 用户接口概念 707