编辑推荐
★ 10个典型的开发实例,覆盖基本游戏类型 怪物——点击动作游戏 迷你拼图——拼图游戏 地牢吞噬者——吃豆游戏 In the Dark Water——3D声音探索游戏 摇滚女孩——节奏游戏 噬星者——全方位滚动射击游戏 吃月亮——消除动作解谜游戏 猫跳纸窗——跳跃动作游戏 村子里的传说——角色扮演游戏 迷踪赛道——驾驶游戏 ★ 南梦宫高级开发者执笔,重点讲解设计思路和实现细节,公开灵感来源 每个实例都从一个idea开始,不断丰富,将玩法规则具体化之后,进而规划各功能模块,引导你思考必要的数据结构和编程方法,让你真实感受游戏的完善过程。 ★详略得当,风格细腻,附带完整的工程源码 结合丰富的插图,重点解析各类型游戏的实现思路和核心功能,读者可下载随书附带的工程源码了解游戏的完整实现。部分章节还提供了试验工程。 ★原版豆瓣评分9.3分,修订版基于Unity5全面升级,并对Unity的重要概念进行了梳理
内容简介
《Unity游戏设计与实现 南梦宫一线程序员的开发实例(修订版)》的作者是日本知名游戏公司万代南梦宫的高级开发人员,书中基于Unity5,通过10个不同类型的游戏实例,展示了真正的游戏设计和实现过程。本书的重点不在于讲解Unity的各种功能细节,而在于介绍核心玩法的设计和实现思路。每个实例都从一个idea开始,不断丰富,进而自然而然地推出各种概念,引导读者思考必要的数据结构和编程方法。掌握了这些思路,即便换成另外一种引擎,也可以轻松地开发出同类型的游戏。
作者简介
加藤政树, 就职于日本知名的游戏制造商南梦宫。除产品开发外,还负责公司内部中间件的开发和技术研究、高端项目支持、新游戏的研发等工作。近年来也开始致力于NPR(Non Photorealistic Rendering)的研究。代表作品有Fitness Party、Muscle March。
罗水东, 高级游戏开发工程师。10年软件和游戏开发经验,期间5年时间在日本工作。热爱技术,乐于分享心得。目前主要关注领域为Unity3D游戏开发技术、游戏设计模式。
目录
第0章 游戏开发前的准备 1
0.1 Unity入门 Concept 2
0.1.1 概要 2
0.1.2 游戏对象 3
0.1.3 组件 5
0.1.4 资源 8
0.1.5 流程 10
0.1.6 场景 11
0.1.7 预设 13
0.1.8 小结 16
0.2 先来复习一下Unity的基础知识吧 Concept 17
0.2.1 脚本一览 17
0.2.2 本章小节 18
0.2.3 本章开发的小游戏 18
0.3 入门教程(上)——创建项目 Tips 18
0.3.1 概要 18
0.3.2 创建新项目 19
0.3.3 创建地面(创建游戏对象) 20
0.3.4 创建场景,保存项目 21
0.3.5 调整场景视图的摄像机 23
0.3.6 创建方块和小球(创建游戏对象并调整坐标) 24
0.3.7 运行游戏 27
0.3.8 摄像机的便捷功能 28
0.3.9 修改游戏对象的名字 28
0.3.10 模拟物理运动(添加Rigidbody组件) 29
0.3.11 让玩家角色跳起来(添加游戏脚本) 30
0.3.12 修改游戏对象的颜色(创建材质) 35
0.3.13 调整游戏画面的尺寸(调整播放器设置) 36
0.3.14 小结 38
0.4 入门教程(下)——让游戏更有趣 Tips 38
0.4.1 概要 38
0.4.2 让小球飞起来(物理运动和速度) 38
0.4.3 创建大量小球(预设游戏对象) 39
0.4.4 整理项目视图 41
0.4.5 发射小球(通过脚本创建游戏对象) 43
0.4.6 删除画面外的小球(通过脚本删除游戏对象) 46
0.4.7 防止玩家角色在空中起跳(发生碰撞时的处理) 48
0.4.8 禁止玩家角色旋转(抑制旋转) 50
0.4.9 让玩家角色不被弹开(设置重量) 51
0.4.10 让小球强烈反弹(设置物理材质) 52
0.4.11 消除“漂浮感”(调整重力大小) 54
0.4.12 调整摄像机的位置 56
0.4.13 修复空中起跳的bug(区分碰撞对象) 57
0.4.14 小结 63
0.5 关于预设 Tips 64
0.5.1 概要 64
0.5.2 改良“小方块”游戏对象 64
0.5.3 预设与对象实例 65
0.5.4 预设和实例的变更 67
0.5.5 小结 70
0.6 C#和JavaScript的对比 Tips 71
0.6.1 概要 71
0.6.2 类的定义 72
0.6.3 变量的定义 72
0.6.4 函数的定义 73
0.6.5 作用域 74
0.6.6 静态函数和静态变量的定义 74
0.6.7 泛型方法的调用 74
0.6.8 Bool类型和字符串类型 75
0.6.9 数组 75
0.6.10 小结 75
第1章 点击动作游戏——怪物 77
1.1 玩法介绍 How to Play 78
1.2 简单的操作和爽快感 Concept 80
1.2.1 脚本一览 80
1.2.2 本章小节 82
1.3 无限滚动的背景 Tips 82
1.3.1 关联文件 82
1.3.2 概要 82
1.3.3 背景组件的显示位置 83
1.3.4 小结 85
1.4 无限滚动的背景的改良 Tips 85
1.4.1 关联文件 85
1.4.2 概要 86
1.4.3 稍作尝试 86
1.4.4 背景组件显示位置的改良 87
1.4.5 小结 89
1.5 怪物出现模式的管理 Tips 89
1.5.1 关联文件 89
1.5.2 概要 89
1.5.3 怪物出现的时间点 90
1.5.4 怪物出现模式的变化 92
1.5.5 小结 96
1.6 武士和怪物的碰撞检测 Tips 96
1.6.1 关联文件 96
1.6.2 概要 96
1.6.3 分别对各个怪物进行碰撞检测的问题 97
1.6.4 把怪物编成小组 98
1.6.5 小结 100
1.7 得分高低的判定 Tips 100
1.7.1 概要 100
1.7.2 武士的攻击判定 100
1.7.3 判断在多近的距离斩杀 101
1.7.4 小结 104
1.8 使被砍中的怪物向四处飞散 Tips 104
1.8.1 概要 104
1.8.2 想象一下“圆锥体” 104
1.8.3 具体的计算方法 106
1.8.4 小结 108
第2章 拼图游戏——迷你拼图 109
2.1 玩法介绍 How to Play 110
排列拼图碎片,拼出最后的图案! 110
2.2 流畅的拖曳操作 Concept 112
2.2.1 脚本一览 112
2.2.2 本章小节 112
2.3 点住碎片的任意位置拖动 Tips 114
2.3.1 关联文件 114
2.3.2 概要 114
2.3.3 透视变换和逆透视变换 114
2.3.4 被点击处即为光标的位置 114
2.3.5 测试拖曳碎片的中心 117
2.3.6 小结 118
2.4 打乱拼图碎片 Tips 118
2.4.1 关联文件 118
2.4.2 概要 118
2.4.3 设置拼图碎片的坐标为随机数 118
2.4.4 改进策略 119
2.4.5 小结 124
第3章 吃豆游戏——地牢吞噬者 125
3.1 玩法介绍 How to Play 126
3.2 适时进退和逆转的机会 Concept 128
3.2.1 脚本一览 128
3.2.2 本章小节 130
3.3 平滑的网格移动 Tips 130
3.3.1 关联文件 130
3.3.2 概要 130
3.3.3 能够改变方向的时机 131
3.3.4 穿过网格的时机 131
3.3.5 小结 133
3.4 地图数据 Tips 134
3.4.1 关联文件 134
3.4.2 概要 134
3.4.3 文本文件的格式 134
3.4.4 扩展编辑器的功能 139
3.4.5 小结 141
3.5 摄像机变焦功能的运用 Tips 141
3.5.1 关联文件 141
3.5.2 概要 141
3.5.3 调整策略 142
3.5.4 摄像机的视野 143
3.5.5 缓动动画 145
3.5.6 变焦效果的代码实现 146
3.5.7 小结 149
3.6 幽灵的AI Tips 149
3.6.1 关联文件 149
3.6.2 概要 149
3.6.3 跟踪的算法 150
3.6.4 埋伏等待型、包围攻击型和随机型 153
3.6.5 观察幽灵的行动 155
3.6.6 小结 157
第4章 3D声音探索游戏——In the Dark Water 159
4.1 玩法介绍 How to Play 160
4.2 只依靠声音 Concept 162
4.2.1 脚本一览 162
4.2.2 本章小节 164
4.3 仅依靠声音定位 Tips 164
4.3.1 概要 164
4.3.2 3D声音的特性 164
4.3.3 用于实验的项目 166
4.3.4 小结 167
4.4 3D声音的控制 Tips 167
4.4.1 关联文件 167
4.4.2 概要 167
4.4.3 3D声音的设置 167
4.4.4 按一定间隔发出声音 168
4.4.5 声音的淡出 169
4.4.6 小结 170
4.5 潜水艇的操纵 Tips 171
4.5.1 关联文件 171
4.5.2 概要 171
4.5.3 操作方法 171
4.5.4 转弯速度的衰减 173
4.5.5 小结 177
4.6 声纳的制作方法 Tips 177
4.6.1 概要 177
4.6.2 Perspective和Ortho 178
4.6.3 “Dark Water”的声纳摄像机 179
4.6.4 摄像机和对象的层 180
4.6.5 稍作尝试 183
4.6.6 摄像机的视口 184
4.6.7 小结 185
第5章 节奏游戏——摇滚女孩 187
5.1 玩法介绍 How to Play 188
5.2 Band-girl的世界 Concept 189
5.2.1 脚本一览 190
5.2.2 本章小节 190
5.3 显示点击时刻的节拍标记 Tips 192
5.3.1 关联文件 192
5.3.2 概要 192
5.3.3 定位单元 192
5.3.4 标记的显示 195
5.3.5 小结 198
5.4 判断是否配合了音乐点击 Tips 198
5.4.1 关联文件 198
5.4.2 概要 198
5.4.3 得分高低的判断 198
5.4.4 避免重复判断 200
5.4.5 小结 205
5.5 演出数据的管理和执行 Tips 205
5.5.1 关联文件 205
5.5.2 概要 205
5.5.3 事件数据的检索 205
5.5.4 定位单元和执行单元 207
5.5.5 小结 211
5.6 其他调整功能 Tips 211
5.6.1 关联文件 211
5.6.2 概要 211
5.6.3 什么是“turn around” 212
5.6.4 显示时刻的偏移值 212
5.6.5 定位条 214
5.6.6 显示标记的行号 216
5.6.7 小结 216
第6章 全方位滚动射击游戏——噬星者 217
6.1 玩法介绍 How to Play 218
6.2 功能强大的激光制导 Concept 219
6.2.1 脚本一览 220
6.2.2 本章小节 220
6.3 索敌激光的碰撞检测 Tips 222
6.3.1 关联文件 222
6.3.2 概要 222
6.3.3 索敌激光的碰撞检测 222
6.3.4 碰撞网格的生成方法 224
6.3.5 确认碰撞网格 229
6.3.6 小结 229
6.4 不会重复的锁定 Tips 230
6.4.1 关联文件 230
6.4.2 概要 230
6.4.3 锁定的管理 230
6.4.4 小结 233
6.5 制导激光 Tips 233
6.5.1 关联文件 233
6.5.2 概要 233
6.5.3 根据TrailRenderer生成网格 233
6.5.4 制导激光的移动 234
6.5.5 稍作尝试 238
6.5.6 小结 238
6.6 消息窗口 Tips 239
6.6.1 关联文件 239
6.6.2 概要 239
6.6.3 消息队列和显示缓冲区 239
6.6.4 小结 244
第7章 消除动作解谜游戏——吃月亮 245
7.1 玩法介绍 How to Play 246
7.2 爽快的连锁和有趣的方块移动 Concept 248
7.2.1 脚本一览 248
7.2.2 本章小节 250
7.3 同色方块相邻与否的判断 Tips 250
7.3.1 关联文件 250
7.3.2 概要 250
7.3.3 连结与连锁 250
7.3.4 不停地检测相邻方块 251
7.3.5 递归调用 253
7.3.6 用于测试连结检测的工程 256
7.3.7 防止无限循环检测 257
7.3.8 小结 258
7.4 方块的初始设置 Tips 259
7.4.1 关联文件 259
7.4.2 概要 259
7.4.3 颜色的选择方法 259
7.4.4 随机选取方块的摆放位置 262
7.4.5 小结 264
7.5 动画的父子构造关系 Tips 264
7.5.1 关联文件 264
7.5.2 概要 264
7.5.3 方块的运动 264
7.5.4 动画的父子构造——用于测试的工程 267
7.5.5 “吃月亮”中面板的位置和角度的计算 272
7.5.6 小结 274
7.6 方块的平滑移动 Tips 274
7.6.1 关联文件 274
7.6.2 概要 274
7.6.3 数组的索引和画面上的位置 275
7.6.4 桶列方法 277
7.6.5 小结 280
第8章 跳跃动作游戏——猫跳纸窗 281
8.1 玩法介绍 How to Play 282
8.2 刺激的跳跃 Concept 284
8.2.1 脚本一览 284
8.2.2 本章小节 286
8.3 角色的状态管理 Tips 286
8.3.1 关联文件 286
8.3.2 概要 286
8.3.3 角色的动作 286
8.3.4 状态的迁移 287
8.3.5 状态管理的流程 288
8.3.6 小结 292
8.4 可以控制高度的跳跃 Tips 293
8.4.1 关联文件 293
8.4.2 概要 293
8.4.3 跳跃的物理规律 293
8.4.4 自由控制跳跃高度的操作 294
8.4.5 小结 297
8.5 窗户纸的碰撞检测 Tips 297
8.5.1 关联文件 297
8.5.2 概要 297
8.5.3 “碰撞”的内部实现机制 297
8.5.4 窗户对象 299
8.5.5 矛盾的碰撞结果 299
8.5.6 平滑地穿过格子眼 309
8.5.7 小结 312
第9章 角色扮演游戏——村子里的传说 313
9.1 玩法介绍 How to Play 314
9.2 移动简单,人人都是主人公 Concept 316
9.2.1 脚本一览 316
9.2.2 本章小节 318
9.3 事件和Actor Tips 318
9.3.1 关联文件 318
9.3.2 概要 318
9.3.3 事件 318
9.3.4 事件的数据结构 322
9.3.5 Actor 324
9.3.6 事件的执行 327
9.3.7 试着执行一个事件 330
9.3.8 小结 332
9.4 游戏内参数 Tips 332
9.4.1 关联文件 332
9.4.2 概要 332
9.4.3 游戏内参数 332
9.4.4 小结 336
9.5 事件文件的读取 Tips 336
9.5.1 关联文件 336
9.5.2 概要 336
9.5.3 文件的读取 336
9.5.4 小结 340
9.6 特殊的事件 Tips 341
9.6.1 关联文件 341
9.6.2 概要 341
9.6.3 选项指令 341
9.6.4 宝箱事件 343
9.6.5 进入屋子的事件 345
9.6.6 小结 346
第10章 驾驶游戏——迷踪赛道 347
10.1 玩法介绍 How to Play 348
10.2 自行创建,即作即用 Concept 350
10.2.1 脚本一览 350
10.2.2 本章小节 352
10.2.3 关于Car Tutorial脚本 352
10.3 透视变换和逆透视变换 Tips 352
10.3.1 关联文件 352
10.3.2 概要 352
10.3.3 透视变换 353
10.3.4 逆透视变换 355
10.3.5 小结 357
10.4 多边形网格的生成方法 Tips 358
10.4.1 关联文件 358
10.4.2 概要 358
10.4.3 生成道路的中心线 359
10.4.4 多边形的生成方法 361
10.4.5 生成道路多边形 362
10.4.6 急转弯时的多边形重叠 367
10.4.7 多边形生成的测试用工程 368
10.4.8 小结 368
10.5 模型的变形 Tips 368
10.5.1 关联文件 368
10.5.2 概要 368
10.5.3 变形后顶点的位置坐标 369
10.5.4 小结 373
10.6 点缀实例 Tips 373
10.6.1 关联文件 373
10.6.2 概要 373
10.6.3 生成基准线 374
10.6.4 把树木设置到基准线上 378
10.6.5 小结 382
《Unity游戏设计与实现:南梦宫一线程序员的开发实例(修订版)》是一本旨在为Unity游戏开发者提供深度实践指导的专业书籍。它并非简单的工具书,而是通过大量来自行业一线、特别是资深游戏开发者的真实项目经验,为读者剖析Unity游戏开发的核心理念、关键技术以及高效的开发流程。本书内容详实,涵盖了从基础概念到高级技巧的广泛领域,旨在帮助读者构建坚实的游戏开发基础,并能独立解决实际开发中遇到的各种挑战。 本书的核心价值在于其“一线程序员的开发实例”这一独特视角。它跳出了枯燥的理论讲解,而是将Unity的强大功能与游戏设计理念巧妙融合,通过精心挑选和打磨的实际开发案例,向读者展示如何在真实的项目环境中应用Unity。这些案例覆盖了多种游戏类型和开发阶段,从概念验证到完整的游戏发布,让读者能够真切地理解每个技术点在实际开发中的作用和价值。 深入剖析Unity核心引擎与工作流程 对于Unity引擎本身,本书将深入探讨其核心架构和关键组件。读者将学习到Unity场景管理、游戏对象生命周期、组件系统的工作原理,以及如何高效地利用Prefabs、ScriptableObjects等数据结构来组织和管理项目资源。此外,本书还会详细讲解Unity的渲染管线,包括URP(通用渲染管线)和HDRP(高画质渲染管线)的原理和应用,帮助读者理解如何优化画面表现,以及根据项目需求选择合适的渲染方案。 在工作流程方面,本书会分享来自一线开发者的经验,例如如何进行版本控制(Git)、资源管理、团队协作的最佳实践。读者将了解到如何在Unity中集成第三方SDK、设置CI/CD(持续集成/持续部署)流程,以及如何进行性能分析和优化,确保游戏在不同平台上的流畅运行。 从概念到实现:游戏设计理念的实战应用 本书不仅关注技术实现,更强调游戏设计理念与技术实现之间的紧密联系。在游戏设计层面,本书将引导读者理解如何将抽象的游戏设计概念转化为具体的Unity实现。例如,如何设计和实现一个引人入胜的玩家角色控制系统,包括移动、跳跃、交互等;如何构建动态的AI行为,让NPC(非玩家角色)能够做出智能且具有挑战性的反应;如何设计和实现富有深度的关卡机制,并利用Unity的物理引擎和动画系统来增强游戏的真实感和趣味性。 本书会详细讲解如何使用Unity的内置物理引擎(PhysX)来模拟真实的物理交互,从简单的碰撞检测到复杂的布娃娃效果,以及如何利用其来设计具有挑战性的解谜关卡或动作场景。在动画方面,本书将涵盖Unity动画系统的使用,包括Animator Controller、Animation Clips、Mecanim等,并分享如何创建流畅的角色动画、场景动态效果,以及如何通过程序化动画来增强游戏的表现力。 关卡设计与场景构建的艺术 关卡设计是游戏体验的核心组成部分。本书将深入探讨Unity中进行关卡设计的技术和方法。读者将学习如何使用Unity的地形系统(Terrain System)来创建逼真的自然环境,包括山脉、河流、植被等。同时,本书还会讲解如何利用Unity的ProBuilder工具进行原型化关卡设计,以及如何通过Tilemap系统来高效地构建2D游戏场景。 在场景构建方面,本书将引导读者理解如何利用Unity的资源商店(Asset Store)来获取高质量的3D模型、纹理和特效,并分享如何对其进行整合和优化,以构建出视觉上引人注目且性能高效的游戏世界。还会涉及光照系统的设置,包括实时光照、烘焙光照,以及如何利用Post Processing Stack来调整画面的色彩、景深、抗锯齿等效果,从而提升游戏的整体视觉质量。 用户交互与界面设计的最佳实践 优秀的用户交互和界面设计是游戏成功的关键。本书将详细讲解Unity UI系统的使用,包括Canvas、UI元素(Image, Text, Button等)的创建和布局,以及如何使用Unity的事件系统来响应用户的输入。读者将学习如何设计和实现直观易用的游戏菜单、HUD(抬头显示),以及如何通过动画和过渡效果来提升用户体验。 此外,本书还会分享如何处理不同分辨率和屏幕比例的适配问题,确保游戏在各种设备上都能提供一致的用户体验。还会涉及触控输入、鼠标键盘输入以及手柄输入的处理,以及如何根据不同的输入方式来优化操作逻辑。 高级技术与性能优化:迈向专业级开发 为了满足对更高层次技术的需求,本书还将深入探讨一些高级Unity技术。例如,如何使用Shader Graph来创建自定义的着 Şu、材质和视觉效果,为游戏增添独特的艺术风格。如何利用Unity的粒子系统(Shuriken)来制作震撼的特效,如爆炸、火焰、魔法等。 性能优化是游戏开发中不可或缺的一环。本书将提供一套系统的性能分析和优化方法论。读者将学习如何使用Unity Profiler来识别性能瓶颈,并掌握各种优化技巧,包括Draw Call的减少、内存管理的优化、物理计算的优化、以及算法的优化等。这些宝贵的经验将帮助读者开发出更加流畅、响应迅速的游戏。 跨平台开发与发布:让游戏触达全球玩家 随着游戏市场的全球化,跨平台开发变得越来越重要。本书将分享Unity在不同平台(PC、Mobile、Console)上的开发和发布经验。读者将了解到如何针对不同平台的特性进行适配和优化,例如移动端的触摸操作、内存限制,以及主机端的控制器支持等。 本书还将涵盖游戏打包、发布以及市场推广的初步指导,帮助读者了解如何将自己的游戏作品推向玩家,并为未来的商业化开发打下基础。 案例精选与总结 本书的每一部分都将紧密结合实际的开发案例,这些案例均来自经验丰富的Unity开发者,涵盖了从2D到3D,从休闲到硬核等多种游戏类型。通过对这些案例的深度剖析,读者将不仅能学习到具体的技术实现方法,更能领悟到其中的开发思路和决策过程。 本书的最终目标是赋能读者,让他们能够自信地运用Unity引擎,将富有创意的游戏想法转化为高质量的实际作品。无论您是刚刚接触Unity的新手,还是希望提升专业技能的资深开发者,本书都将是您在Unity游戏开发旅程中不可或缺的得力助手。它将带领您走进Unity的广阔世界,解锁无限的游戏开发潜力。