游戏设计、原型与开发:基于Unity与C#从构思到实现
  • 推荐3
  • 收藏3
  • 浏览1.6K

游戏设计、原型与开发:基于Unity与C#从构思到实现

Jeremy Gibson (作者)  刘晓晗 (译者) 孔祥飞 (责任编辑)

  • 丛  书:游戏设计与开发
  • 书  号:978-7-121-31121-5
  • 出版日期:2017-04-06
  • 页  数:728
  • 开  本:16(185*260)
  • 出版状态:上市销售
  • 原书名: Introduction to Game Design, Prototyping, and Development: From Concept to Playable Game with Unity and C#
  • 原书号:9780321933164
  • 维护人:n-y
这是一本将游戏设计理论、原型开发方法以及编程技术巧妙结合在一起的书籍,目的是填补游戏设计与编程开发之间的缺口,将两者联系起来。随着 Unity 游戏开发技术趋于成熟,游戏设计师把自己的想法转换为数字原型已变得极为重要。书中汇集了国际知名游戏设计专家——Jeremy Gibson 在北美地区首屈一指的游戏设计课程的教学经验,整合了成为成功游戏设计师和原型设计师所需要的相关技能与知识,能够有效帮助读者熟练运用 Unity 进行原型开发与游戏设计,以及借助 C#进行游戏编程。
游戏制作是一门手艺,是很多人的梦想,但其重重困难也时常令人望而却步。当你徘徊在游戏制作之门手足无措时,这本书可以从理论和实践两方面帮你打下牢固的基础。翻开这本书,跟随其中的指引冲破阻碍,也许创造下一个经典游戏的就是你!
首本将游戏设计理论、原型开发方法以及编程技术巧妙结合在一起的书籍!
汇集国际知名游戏设计专家——Jeremy Gibson在北美地区首屈一指的游戏设计课程的教学经验,整合成为成功游戏设计师和原型设计师所需要的相关技能与知识!助你成为下一个经典游戏的创作者!
前言
欢迎阅读本书。笔者有多年游戏设计方面的经验,并在多所大学担任过游戏设计课程的教授,其中包括南加州大学的互动媒体和游戏专业、密歇根大学安娜堡分校的电气工程与计算机科学专业等,本书便是基于本人多年的专业经验编写而成的。
本前言主要介绍本书写作的目的、内容以及本书的使用方法。
本书的写作目的
本书的写作目的非常明确:提供读者成为成功游戏设计师和原型设计师所需要的工具和知识,我尽可能地将所有的相关技能和知识都纳入了本书。与其他教程类的书籍不同的是,本书结合了游戏设计的原则与数字开发(也就是计算机编程)内容,并将两者融入互动原型中。随着性能先进同时又简便易用的游戏开发引擎的出现(比如Unity),原型构建正变得前所未有的简单。而且,学会原型开发也有助于你成为一名更优秀的游戏设计师。
第Ⅰ部分:游戏设计和纸面原型
本书的第Ⅰ部分介绍了游戏设计的不同理论和分析框架,这些内容在早年出版的一些书籍里均有涉及。本部分介绍了一种将这些理论结合并拓展延伸的方法——四元分层法。四元分层法探究了与互动体验设计相关的决策内容。本部分同时含纳了不同游戏设计原则的挑战难度,阐述了纸面原型的设计过程、游戏测试和迭代设计。这些具体的信息和知识将有助于读者成为合格的设计师。
第Ⅱ部分:数字原型
本书的第Ⅱ部分介绍了编程的内容。该部分的编写基于我作为教授多年为零基础的学生授课的经验,我在课堂上也使用这些内容教导学生如何利用数字编程表达自己游戏设计的理念。如果你此前没有学过任何编程或开发的相关知识,也没有任何经验的话,那么本书第Ⅱ部分的内容就是为你量身定做的。如果你此前有过一定的编程经验的话,那么你也可以学到几个编程的小窍门,了解到一些不同的编程方法。
第Ⅲ部分:游戏原型实例和教程
本书的第Ⅲ部分围绕多种迥异的原型教程展开,你能学习到不同类型游戏的开发方法。该部分内容的主要目的是:通过展示不同类型游戏的开发方式,借此展现开发游戏原型的最佳办法,并且这些知识将为你将来的工作打下良好的基础。市场上其他图书的教程多数只介绍一种类型的教程,篇幅长达上百页。相比之下,本书的教程种类繁多,短小精悍。虽然没有那些书籍的单个教程内容详尽,但是我认为学习不同类型的教程更有助于读者将来自己准备项目开发。
第Ⅳ部分:附录
本书包含了一些很重要的附录内容,值得在这里提一下。我将书中多次提及的信息,以及我认为读者阅读后有可能想要再次查阅的内容放在了附录内,因此本书的附录并不是通篇重复的内容,也不需要读者翻阅不同章节寻找。附录A是运用Unity创建游戏项目的步骤。附录B“有用的概念”是篇幅最长的附录,虽然该附录的名字十分平庸,但是我认为你以后会经常来查阅这部分的知识。“有用的概念”里集合了我个人在游戏原型开发上经常使用的技术和策略。附录C囊括了所有有用的网站参考链接。在互联网上想要找到自己需要的信息总是很难,本附录列出的网站则是我经常使用的。
数字原型:Unity
本书提到的所有数字游戏实例均基于游戏引擎Unity 和C#语言。我在讲授数字游戏开发和互动体验课程上有十多年的经验,在我看来,目前为止Unity是学习游戏开发的最佳工具,C#语言则最适合原型设计师学习。虽然现在也有一些开发工具不需要使用者具备任何编程技术(比如Game Maker和Game Salad),但是Unity的资源包更灵活多变,并且基本上都是免费的(Unity的免费版本包含付费版本的大多数内容,本书通篇用到的Unity也都是免费版本的)。如果你真的想学习游戏编程,那么Unity是你的最佳选择。
同样,有一些编程语言要比C#语言更容易使用。过去我教过学生ActionScript和 JavaScript,但这么长时间以来C#的灵活性和强大的功能一直让我印象深刻。学习C#不仅是学习简单的编程,更是学习编程的方法。JavaScript对使用者在编程时的严谨性要求不高,可我发现这实际上会减慢开发的速度。C#在这方面则要严格得多(通过强类型变量等内容),这不仅有助于使用者成为更出色的程序员,同时也会提升编程速度(比如强类型提供代码自动完成的提示,让使用者更快速、准确的编程)。
本书面向的受众群体
市面上有很多关于游戏设计书籍,也有很多关于编程的图书。本书的宗旨就是填补游戏设计和编程之间的缺口,将两者联系起来。随着像Unity的游戏开发技术趋于成熟,游戏设计师把自己的想法转换为数字原型就变得极为重要。本书能帮助你:
如果你有兴趣致力于游戏设计领域,但是从未学过编程,那么本书是你的最佳选择。第Ⅰ部分介绍了几种不同的游戏设计理论,以及探索设计理念的办法。第Ⅱ部分教授零基础读者学习编程,了解面向对象的类体系。自从我担任大学教授以来,我的课程主要都是教授没有编程学习背景的学生学习游戏编程。我将自己的所有教学经验提炼浓缩至第Ⅱ部分内容中。第Ⅲ部分阐述了不同游戏类型的八种游戏原型开发方法。每一种方法都能快速地把概念转变成数字原型。第Ⅳ部分的附录列举了游戏开发和编程的概念,提供了扩展学习的资源。附录B“有用的概念”里有很多深入探究的内容,接下来的很多年里你也会经常用到这部分内容。
如果你有过编程经验,同时对游戏设计感兴趣,那么本书的第Ⅰ部分和第Ⅲ部分对你最有用。第Ⅰ部分介绍了不同的游戏设计理论和探索设计理念的办法。第二部分介绍了C#语言,以及如何在Unity环境中运用C#,你可以跳过这部分内容。如果你熟悉其他编程语言,那么你就会发现C#和C++很相似,同时带有Java的一些高级功能。第Ⅲ部分阐述了不同游戏类型的八种游戏原型开发方法。用Unity开发游戏和用其他游戏引擎开发截然不同,因为许多元素都是在编程外进行设计的。本书中举出的每一种原型实例都最适合用在Unity上,并且开发速度都很快。你也应该仔细阅读附录B,该附录含纳了不同开发概念的详细信息和内容,值得你翻阅查看。

目录

第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

本书勘误

印次
  • 页码:363  •  行数:1  •  印次: 1

    FixUpdate() 因该改为 FixedUpdate()

    朝花暮四郎 提交于 2017/10/26 9:58:35
    n-y 确认于 2018/1/24 14:51:32
  • 页码:409  •  行数:17  •  印次: 1

    shieldLevel = Mathf.Min(value,4); 中的shieldLevel应改为 _shieldLevel。

    h401452517 提交于 2017/5/5 15:25:09
    博文小编 确认于 2017/5/11 16:29:37
  • 页码:424  •  行数:21  •  印次: 1

    void Update(){}代码块中缺少与“隔一定时间后,让升级道具渐隐”和“根据默认值,升级道具可以存在10秒钟”有关的代码。

    h401452517 提交于 2017/5/6 17:29:26
    博文小编 确认于 2017/5/11 16:29:07
  • 页码:424  •  行数:21  •  印次: 1

    缺少 u 的相关定义,应该是 float u = (Time.time - birthTime - lifeTime) / fadeTime;

    Arno Clare 提交于 2019/9/21 21:45:07
    n-y 确认于 2019/9/23 16:00:34
  • 页码:469  •  行数:21  •  印次: 1

    void Start(){}代码块中第三行deck.Shuffle应改为Deck.Shuffle

    h401452517 提交于 2017/5/8 16:53:16
    博文小编 确认于 2017/5/9 16:21:19

读者评论

  • 308页第28行,直接缺漏第116行代码。

    WoodEstt发表于 2018/11/29 22:58:54
  • Page119 R8
    一张【副?】牌中有12张人头和4张A。

    麻痹戒子发表于 2017/11/22 15:18:36
  • Page 49 R13
    如果玩家使用标准分辨率电视,文字需要很多【大?】才可看清。

    麻痹戒子发表于 2017/11/21 15:27:09
  • 页码363 行数:1 印次1
    FixUpdate() 因该改为 FixedUpdate()

    朝花暮四郎发表于 2017/10/26 9:57:49
  • Page 246
    R32:str +=sTemp+””
    why should add “” after ‘sTemp’
    i mean i do not add that and there’s no error

    S.M.Joey发表于 2017/9/29 13:17:03

同系列书