前言
前言
2004年,Unity公司诞生于丹麦的阿姆斯特丹,2005年将总部设在了美国的旧金山,并发布了Unity 1.0版本。起初它只能应用于MAC平台,主要针对WEB项目和VR(虚拟现实)的开发。这时的它并不起眼,直到2008年推出Windows版本,并开始支持iOS和Wii,才逐步从众多的游戏引擎中脱颖而出,并顺应移动游戏的潮流而变得炙手可热。2009年,Unity的注册人数已经达到了3.5万,荣登2009年游戏引擎的前五名。2010年,Unity开始支持Android,继续扩散影响力。其在2011年开始支持PS3和XBOX360,则可看作全平台的构建完成,截至笔者发稿目前Unity已经支持Windows、Mac OS X、web browsers、iOS、Android、PlayStation 3、Xbox 360、Xbox One、Windows Store、Windows Phone、Linux、Blackberry 10、Wii U、PlayStation 4、PlayStation Vita、PlayStation Mobile、Samsung Tizen、Xbox One等几乎所有的主流平台。
如此的跨平台能力,很难让人再挑剔,尤其是支持当今最火的Web、iOS和Android平台。另据国外媒体《游戏开发者》报道:在游戏引擎里哪种功能最重要的调查中,“快速的开发时间”排在了首位,很多Unity用户认为这款工具易学易用,一个月就能基本掌握其功能。
根据Unity 官方(2014年8月)最新公布的数据,全世界有6亿的玩家在玩使用Unity引擎制作的游戏,用Unity 创造的应用和游戏目前的累计下载量达到了87亿次!
Unity中国区的开发者数量、用户活跃度和终端安装量均已经成为全球第一。 Unity 引擎占据全功能游戏引擎市场45%的份额。全球用户已经超过330万人,每月活跃用户数高达60万! 惊人的详细数据如下:
1. 市场份额45%居全球首位
在世界范围内,Unity占据全功能游戏引擎市场45%的份额,居全球首位。最接近Unity的竞争对手的市场份额只有其1/3。
2. 6亿玩家,87亿次下载
Unity通过使用我们的引擎制作的游戏吸引了遍布世界各地的6亿游戏玩家。相比之下,Facebook拥有8.29亿的日常用户。用Unity 创造的应用和游戏目前的累计下载量达到了87亿次。
2012年,Unity正式进入中国市场,短短两年的发展,已经成就了业务量10倍的增长。无论是开发者的数量、活跃度、终端安装量,还是Unity 引擎在3D游戏市场的占有率,Unity 中国都是当之无愧的全球第一,以下是中国区Unity市场创造的3项世界第一!
1. 中国注册用户数全球第一
Unity 目前的开发者注册人数已经超过330万,在2017年的4月份,中国区的开发者数量已经超越美国,成为全球第一。
2. 中国活跃用户量全球第一
Unity的每月全球活跃用户超过60万。中国区每个月Unity 编辑器被使用的次数总和高达180万次,居全球首位。美国以150万次使用次校居全球第二。
3. 中国区3D 手机游戏市场全球第一
Unity中国区在3D手机游戏市场的占有率已经达到75%,超越日本成为世界第一。也就是说,在最畅销的前100款3D手机游戏中,平均每10款就有7.5款是使用Unity引擎制作的。
本书特点
1. 书籍采用Unity 2017版本进行教学,在第一版的基础上,60%的内容按照新版本进行重写。理论篇增加所有Unity 2017重要知识点:基于Progressive Lightmapper新光照引擎的光照烘焙、光照预览Light Explorer技术、Unity2D 新的Sprite Mask 功能、2D关节系统、精灵效应器组件(Buoyancy Effector2D、PlatformEffector2D等),TimeLine& Cinemachine技术,基于Unity 2017版本AssetBundle资源动态加载理论及AssetBundle实用框架设计等。
2. 根据第一版广大读者的反馈情况,实战项目篇由第一版1个项目的讲解,扩充为4个项目循序渐进地阐述。进一步强化读者对Unity知识点的灵活运用,做到举一反三,让学员零基础开始起步,真正通过一本书成为游戏开发高手!
3. 本书讲解通俗易懂,循序渐进,且对于Unity技术点讲解全面、完整、深入,可以成为读者值得长期珍藏的书籍。
4. 本书配套下载资料包含海量教学资料(采用Unity 2017版),方便大专院校与国内外广大培训机构讲师与学员使用。
5. 为进一步方便国内外广大游戏开发爱好者与读者学习,书籍附录部分提供如下实用学习资料:“国内游戏开发企业面试与笔试真题集锦”、“Unity开发常见错误与分析”、 “游戏开发职位简历模板”、“Unity4.x/5.x/2017.x升级差异总结”、“Unity特殊文件夹一览表”、“Unity对C#语言的知识点基本要求列表”等。
本书配套资料下载与联系作者
为了更好地服务广大Unity学员,进一步提高服务质量,特提供书籍配套教学资料下载链接地址与作者沟通渠道:
? 出版社下载链接: www.hxedu.com.cn
? 百度云下载链接:http://pan.baidu.com/s/1jHCy5vC 密码:wmcj
? 作者微博:http://weibo.com/liuguozhu1
(注:如果以上下载链接失效或者有技术疑问,欢迎在作者微博与QQ群中留言交流)
? QQ群交流:群(1): 480518095 群(2): 332722694
? 编者联系邮箱:public_liuguozhu@163.com
第二版本整体说明
第二版本的改版整体突出三个“更”字:更新、更多、更实用! 详细描述如下。
1. “更新”
全书采用最新Unity 2017.x版本进行讲解,其中涉及Unity 2017最新的光影效果、光影调试LightExplorer 窗口预览技术、强大的影视动画编辑Timeline& Cinemachine功能、全新的动态烘焙NavMesh技术等。
2. “更多”
本版本针对广大高校与培训机构的反馈意见,对于重要核心章节都提供了实战项目练习,以供广大学员更有针对性地巩固学习。
本版本相对第一版,在游戏案例项目上增加到了4个项目的讲解,且最后两个大型游戏项目,换装了全新的场景与道具素材,更具观赏性与可玩性。
3. “更实用”
针对老读者而言,第二版本相对第一版,还着重强化了2D游戏开发中大量实用组件与核心API的讲解、3D图形学中基于PBS材质系统与Shader,以及Unity 2017.x版本资源动态加载AssetBundle的讲解深度与广度。尤其对于AssetBundle技术,本书还提供了商业级的AssetBundle框架封装。不仅对初学者,对于广大Unity研发人员也具有很高的实用与参考价值。
针对广大高校与培训机构老师的意见,对部分章节的讲解顺序与内容做了更加合理的安排,以期达到更佳的学习体验。
致谢
感谢电子工业出版社张迪老师的专业修改意见与鼓励。同时感谢家人的支持,以及吴翔等朋友对技术支持的帮助与汗水付出。最后,祝电子工业出版社越办越好,为祖国IT人才的培养贡献更大的力量。
参加本书编写的还有彭振宇、张光超、范少敏、臧大磊、赵晋伟、毛广超、韦节宾、刘传辉、郭义华、魏吉芳和郭义芳。
由于编者水平有限,且书中涉及知识点较多,难免有错误疏漏之处,敬请广大读者批评指正,并提出宝贵意见。
作者简介
拥有十多年的软件、游戏研发与教学经验,具备深厚语言基础。早年在国内上市企业做研发经理,熟悉企业大型软件运作管理过程、软件架构设计理论。精通与熟悉Unity3D、XNA等3D与2D 游戏开发技术,教学语言思路清晰,循循善诱的教学方法深受广大学子欢迎。
目录
项目实战篇
实战项目1:记忆卡牌 3
1. 策划 3
2. 场景搭建 4
3. 游戏核心逻辑 5
实战项目2:Flappy Bird 8
1. 策划 8
2. 场景搭建 9
3. 主角 10
4. 道具开发 12
5. UI界面与游戏周期管理 15
实战项目3:不夜城跑酷 17
1. 策划 17
2. 场景搭建 19
3. 主角 21
4. 道具开发 24
5. 场景与道具的动态生成算法 31
6. UI界面与游戏周期管理 34
7. 对象缓冲池管理 38
实战项目4:生化危机 41
1. 策划 41
2. 场景搭建 45
3. 主角 47
4. 道具开发 47
5. UI界面与游戏周期管理 51
开发理论篇 上篇
第1章 游戏历史与Unity发展概述 54
1.1 “钱途”无限的游戏开发领域 54
1.1.1 Unity版本快速迭代升级 55
1.1.2 Unity技术应用范围 56
1.1.3 强大的跨平台性 56
1.2 电子游戏发展史 57
1.3 游戏引擎与Unity的发展历程 60
1.3.1 什么是游戏引擎 60
1.3.2 游戏引擎的功能 61
1.3.3 为什么需要使用游戏引擎 61
1.3.4 游戏引擎的发展 62
1.3.5 Unity 游戏引擎的特点 62
1.3.6 Unity引擎的主要特性 63
1.3.7 Unity游戏引擎的发展历史 64
1.4 Unity下载与安装 65
1.4.1 Unity下载与安装 65
1.4.2 Unity的资源商店(Asset Store) 66
第2章 Unity2017.x 安装与3D模型入门 67
2.1 Unity 2017.x版本的下载安装 67
2.2 Unity编辑器界面 75
2.2.1 掌握Unity 编辑器的布局与调整 77
2.2.2 了解Unity 编辑器各个重要视图与作用 78
2.3 3D模型入门操作 80
2.3.1 3D模型的位移、旋转与缩放 80
2.3.2 3D模型操作快捷方式 82
2.3.3 选择3D模型的“正”方向 82
2.3.4 使用属性窗口进行精确调整 84
2.4 开发Unity“Hello World” 85
2.5 本章练习与总结 88
第3章 3D模型基础 89
3.1 Unity编辑器进一步讲解 89
3.1.1 Unity菜单 89
3.1.2 项目(Project)视图 93
3.1.3 场景(Scene)视图 95
3.1.4 视图显示模式 96
3.1.5 场景视图的查看与导航 97
3.2 世界、局部与左手坐标系 98
3.2.1 现实世界的“世界坐标”与“局部坐标” 98
3.2.2 演示两种坐标的差异 98
3.2.3 使用脚本方式演示差异 99
3.2.4 什么是“左手坐标系” 100
3.2.5 使用控制台(Console)窗口进行代码调试 100
3.3 脚本知识入门 101
3.3.1 键盘与鼠标输入代码 101
3.3.2 环绕旋转 101
3.4 小项目开发:地球环绕太阳旋转 101
3.5 本章练习与总结 105
3.6 案例开发任务 105
第4章 地形编辑器 106
4.1 创建基本地形 106
4.1.1 绘制贴图纹理 109
4.1.2 制作各种地形 110
4.1.3 种植树木与花草 113
4.2 观察虚拟世界 113
4.3 扩展地形编辑 115
4.4 本章练习与总结 116
4.5 案例开发任务 117
第5章 光源 118
5.1 概述 118
5.2 光源的分类与重要参数 120
5.3 典型光源场景制作 121
5.4 本章练习与总结 123
5.5 案例开发任务 123
第6章 光照烘焙 124
6.1 概述 124
6.2 光照烘焙 125
6.3 反射探针(Reflection Probe) 132
6.4 光照探头(Light Probe) 134
6.5 光照预览窗口(Light Explorer) 137
6.6 本章练习与总结 138
6.7 案例开发任务 138
第7章 音频 139
7.1 概述 139
7.2 音频剪辑属性 140
7.3 音频监听与音频源组件 140
7.4 音频混响器与滤波器组件 143
7.5 音频混音器(Audio Mixer) 144
7.6 本章练习与总结 151
7.7 案例开发任务 151
第8章 Unity脚本程序设计 153
8.1 Unity 脚本编辑器介绍 153
8.1.1 什么是.Net框架 153
8.1.2 什么是Mono 与MonoDevelop 154
8.1.3 什么是Visual Studio 154
8.2 脚本程序基础 155
8.2.1 创建脚本注意事项 155
8.2.2 项目工程分层设计 156
8.2.3 如何更改脚本模板 157
8.3 Unity重要脚本函数 157
8.3.1 Unity事件函数 157
8.3.2 Untiy重要核心类学习 158
8.3.3 GameObject 类 158
8.3.4 MonoBehaviour类 162
8.3.5 Transform类 165
8.3.6 Time类 166
8.4 Unity脚本生命周期 167
8.4.1 Unity事件函数调用顺序 168
8.4.2 事件函数禁用与启用规律 169
8.5 Unity伪多线程揭秘 172
8.6 修改Unity脚本执行顺序 173
8.7 Unity 重要应用类 175
8.8 Unity输入管理器 176
8.9 本章练习与总结 178
第9章 UI界面开发 179
9.1 概述 179
9.2 基础控件 182
9.2.1 Canvas画布控件 182
9.2.2 EventSystem控件 183
9.2.3 Panel 控件 184
9.2.4 Text控件 184
9.2.5 Image控件 185
9.2.6 Button控件 187
9.2.7 Button事件系统 189
9.3 Anchor锚点与屏幕自适应 191
9.4 UGUI高级控件 193
9.4.1 Toggle控件 193
9.4.2 Slider控件 194
9.4.3 Scrollbar控件 194
9.4.4 ScrollRect复合控件 195
9.4.5 TabPage标签页面 197
9.5 UGUI布局管理控件 199
9.6 本章练习与总结 202
9.7 案例开发任务 202
第10章 3D模型与动画制作 204
10.1 概述 205
10.2 3DMax软件基本使用 205
10.3 3D模型尺寸单位设置 207
10.4 3DMax 模型制作与导出Unity流程 208
10.5 模型导出丢失贴图问题 212
10.6 3D文字的制作与动画 212
10.7 角色Legacy动画 213
10.8 Animation 动画编辑工具 216
10.9 自定义资源包的导入与导出 219
10.10 本章练习与总结 222
10.11 案例开发任务 222
第11章 物理学模拟 223
11.1 概述 223
11.2 刚体 223
11.3 物理材质 227
11.4 脚本控制刚体 229
11.5 关节系统 230
11.5.1 铰链关节 230
11.5.2 弹簧关节 232
11.5.3 固定关节 232
11.5.4 角色关节 233
11.5.5 布料模拟 235
11.6 物理管理器(Physics Manager) 237
11.7 本章练习与总结 238
第12章 碰撞体与触发器 239
12.1 概述 239
12.2 碰撞体的分类与作用 240
12.3 碰撞检测事件函数 241
12.4 触发检测事件函数 242
12.5 碰撞过滤 244
12.6 本章练习与总结 246
12.7 案例开发任务 247
第13章 Unity 2D技术 248
13.1 概述 248
13.2 项目示例讲解 248
13.3 Untiy 2D物理引擎 253
13.3.1 2D刚体 253
13.3.2 2D碰撞体 254
13.3.3 2D关节系统 256
13.4 Unity 2D特效功能 256
13.4.1 Sprite Mask 功能 256
13.4.2 精灵效应器组件 258
13.5 本章练习与总结 263
13.6 案例开发任务 263
第14章 协程与调用函数 264
14.1 协程定义与功能 264
14.2 调用函数定义与功能 265
14.3 协程与调用函数区别与适用范围 266
14.4 本章练习与总结 267
14.5 案例开发任务 267
第15章 数据传值技术 268
15.1 概述 268
15.2 SendMessage 简单传值 269
15.3 SendMessage 高级传值 271
15.4 本章练习与总结 272
开发理论篇 下篇
第16章 3D数学 274
16.1 坐标系统 274
16.2 向量 279
16.3 本章练习与总结 287
第17章 3D图形学 288
17.1 3D图形学概述 288
17.2 Unity 3D图形渲染 289
17.2.1 Mesh Fillter网格过滤器 289
17.2.2 Mesh Renderer网格渲染器 290
17.2.3 Skinned Mesh Renderer蒙皮网格渲染器 291
17.3 贴图 292
17.3.1 二维贴图 292
17.3.2 视频贴图 297
17.3.3 渲染贴图 301
17.4 材质 302
17.4.1 基于物理着色(PBS)的材质系统 303
17.4.2 材质球属性 305
17.4.3 材质球分类 306
17.5 着色器(Shader) 313
17.5.1 概述 313
17.5.2 基本原理:图形渲染管线 314
17.5.3 着色器的分类与基本结构 315
17.5.4 固定渲染管线着色器 318
17.5.5 表面着色器 320
17.6 本章练习与总结 327
第18章 TimeLine& Cinemachine技术 328
18.1 TimeLine时间线 328
18.2 Cinemachine 虚拟摄像机 332
18.3 Frame Recorder帧录制器 335
18.4 本章练习与总结 336
第19章 粒子系统 337
19.1 概述 337
19.2 基本粒子组件属性 338
19.3 粒子系统示例 344
19.4 Unity内置粒子系统包 346
19.5 粒子系统的脚本调用方式 347
19.6 Line Renderer & Trail Renderer 348
19.7 本章练习与总结 351
第20章 Mecanim动画系统 352
20.1 概述 352
20.2 制作Mecanim动画系统 353
20.2.1 步骤一:制作Avatar替身 353
20.2.2 步骤二:设置动画状态机(Animator Controller) 356
20.2.3 步骤三:设置动画循环 359
20.2.4 步骤四:使用代码控制角色动画 359
20.3 融合术技术 360
20.4 动画层与身体蒙版 365
20.5 动画复用技术 367
20.6 StateMachineBehaviour脚本 368
20.7 本章练习与总结 370
第21章 导航寻路 371
21.1 基本导航寻路 371
21.2 斜坡与跳跃 374
21.3 使用Off Mesh Link组件 375
21.4 网格分层 376
21.5 Nav Mesh Obstacle组件 378
21.6 基于组件Nav Mesh的新特性 380
21.7 Nav Mesh定向3D空间任何方向新
以下为对购买帮助不大的评价