1、 内 容 简 介 本书从架构与封装、艺术资源、底层核心、自定义扩展和独立游戏五个方向组织内容,每一方向均围绕一个问题展开论述,重点讲解了 Unity 3D 开发的高级技巧。这种问答的形式,既有助于读者扩展思考,又可用于面试题。本书除了涉及代码架构和引擎底层原理,还包含了美术资源管理、艺术效果制作、工作流程优化等,通过解析这些实际开发过程中遇到的问题,可以更全面地提升读者的知识储备。书中的大部分章节都附有示例代码,聚焦具体的知识点,让读者知其然并知其所以然。本书适用于希望技术进阶的 Unity 3D 开发者、独立游戏开发者,或有初级经验的游戏从业者。未经许可,不得以任何方式复制或抄袭本书之部分或
2、全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 游戏架构:核心技术与面试精粹/樊松阳著.北京:电子工业出版社,2018.7 ISBN 978-7-121-34263-9.游.樊.游戏软件设计.TP311.5 中国版本图书馆 CIP 数据核字(2018)第 109387 号 责任编辑:安 娜 印 刷:三河市良远印务有限公司 装 订:三河市良远印务有限公司 出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编:100036 开 本:787980 1/16 印张:16.25 字数:309.6 千字 彩插:2 版 次:2018 年 7 月第 1 版 印 次:2018 年 7 月第
3、 1 次印刷 定 价:69.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。本书咨询联系方式:010-51260888-819,。前 言前 言 这是一本面向游戏开发者的进阶指南。本书从日常开发遇到的问题入手,以编程思想为线索,探讨合理的解决方案。在技术方面,本书会结合使用广泛的 Unity 3D 进行讲解。虽然本书中的很多内容都不会被引擎所桎梏,但从某种意义上讲,这确实是一本对 Unity 3D 使用者有更大价值的书。为了更便于查找,本
4、书内容组织上采用问答的形式。提出的问题通常都是开放性的,随着对底层原理认识的加深,读者自己也能答出更多有料的内容。当然,作者也会被自身能力限制,所以答案是探讨式的,以期逐步深入地挖掘原理。本书整体通过以下五个方向组织内容:架构与封装、艺术资源、底层核心、自定义扩展和独立游戏。从层次上看是从应用层、效果层、引擎层、工具层到职能扩展层的顺序论述。大体看来,是从日常技能逐渐过渡到核心能力的讲解顺序。每个方向围绕一个问题展开论述,有的内容会侧重概念的讲解,大多数情况下会结合实际代码来说明。通过这样的方式,尽量让读者知其然并知其所以然。很多小结后面会有延伸思考,我也希望读者能根据问题深入探讨,这些问题大
5、多附有解答思路,希望能帮助大家养成勤于思考的习惯。对于游戏来说,技术只是其中的重要部分,但我更将其看作技术与艺术的结合体,因此美术方面的知识、游戏玩法的设计也不可或缺。本书在编排的过程中,我尽量兼顾上述要点,以期有兴趣的新手读者,从业人员,或者是独立开发者,都能从本书中得到些收获。另外,对于希望进入游戏界的读者,本书可以从全局的角度,帮助你理解游戏开发的架构流程。本书中会将一些网址,或者一些扩展问题的解答放到我的微信公众号中,通过在公众号中回复相应的关键字来获得自动回复。采用这种做法主要基于以下原因:IV游戏架构:核心技术与面试精粹 链接很容易更新或失效。手动输入链接比较麻烦,通过微信电脑端可
6、以直接在 PC 上打开有效的链接。有链接形式的引用知识,方便跳转阅读。对照问题答案时,避免来回翻页。在本书中,我会以:回复关键字来标注某些特殊的内容,通过在微信中回复关键字可以得到相关信息。下面是我的微信公众号,可扫码加入。本书前四部分讨论的问题都可以用来做面试题,面试时也可以延伸出很多扩展问题。希望读者能勤于思考,动手实践,“纸上得来终觉浅,绝知此事要躬行”。资源引用 本书引用的资源基本出自 AssetStore 中,可以免费下载完整版。我对其中的一些资源做了整合,如果希望下载这些挑拣过后的资源,可以直接下载随书的代码工程,地址为:mygit。前面的标记表示,在我的微信公众号中回复 mygi
7、t 即可获得相关内容,以防链接失效。下面介绍这些资源的出处。2D platformer Unity 官方的 2D 示例,AssetStore 的链接为 http:/u3d.as/5m5。在这个项目中可以看到 2D帧动画的制作方法,其中包含了一个可运行的游戏。前 言V 2D Roguelike 一个 2D 像素风格的项目,AssetStore 链接为 http:/u3d.as/bAx。这个项目展示了如何使用序列帧制作游戏。Unity-Chan Unity 日本公司提供的 Unity 资源,AssetStore 链接为 http:/u3d.as/85c。它包含一个动漫少女的模型和动画。截至本书出版
8、,它仍是目前 AssetStore 中,品质数一数二的美术资源。资源的材质包含了目前主流的卡通渲染技术,在日渐火爆的二次元环境下,这个免费样例极具参考价值。VI游戏架构:核心技术与面试精粹 但需要注意的是,这个角色受到 Unity-Chan License Terms 证书的保护,如果需要在商业产品中使用该资源,需要在显眼处标记 UnityChan 公司的标志。Space Robot Kyle 这是一个 Unity 官方推出的机器人模型,AssetStore 链接为 http:/u3d.as/3t7。整个项目十分简单,只有模型、Diffuse 贴图、Normal 贴图和标准 Lambert 材
9、质。由于它效果不错,又是很早就出现的 Unity 官方资源,因此在 AssetStore 中,大量插件都使用它作为功能演示模型。前 言VII 读者服务 轻松注册成为博文视点社区用户(),扫码直达本书页面。提交勘误:您对书中内容的修改意见可在 提交勘误 处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。页面入口:http:/ VIII游戏架构:核心技术与面试精粹 目目 录录 第一部分 架构与封装 第 1 章 UI 交互.2 1.1 绑定事件响应.21.2 事件传递流程.71.3
10、 事件响应接口.11第 2 章 玩法底层.16 2.1 游戏循环.162.2 时间记录.232.3 动画事件.272.4 游戏同步.31第 3 章 辅助系统.36 3.1 有限状态机.363.2 脚本系统.43第二部分 艺术资源 第 4 章 资源分类.50 4.1 贴图种类.504.2 材质效果.544.3 动画分类.634.4 流动效果.66目 录IX 第 5 章 后处理效果.71 5.1 模糊效果.715.2 泛光效果.795.3 辉光效果.835.4 景深.94第 6 章 资源工作流.108 6.1 图片格式更改.1086.2 动画抽取.1116.3 文件移动检测.116第三部分 底层核
11、心 第 7 章 渲染原理.120 7.1 渲染管线.1207.2 渲染顺序.126第 8 章 3D 数学基础.129 8.1 点和向量.1298.2 向量的运算.1308.3 区域检测.1388.4 平面移动.142第章 寻路算法.147 9.1 寻路这件事.1479.2 A*算法.1509.3 Navigation 系统.1589.4 任务调配.161第四部分 自定义扩展 第 10 章 调试工具.168 10.1 GM 命令.168X游戏架构:核心技术与面试精粹 10.2 绘制曲线.17410.3 指示绘制.181第 11 章 日志工具.190 11.1 出错暂停.19011.2 日志接口优
12、化.19511.3 频道化日志.19911.4 崩溃日志上报.204第 12 章 快捷功能.207 12.1 自定义菜单.20712.2 定制 UI.21312.3 回退操作.217第 13 章 后台服务.221 13.1 编辑器服务.22113.2 自动注册框架.22513.3 遍历文件.228第五部分 独立游戏 第 14 章 角色分工.234 14.1 产品策划.23414.2 美术设计.23714.3 运营知识.24114.3.1 用户规模数据.241 14.3.2 用户价值数据.244 14.4 总结.245参考文献.247 第一部分 架构与封装 在开发游戏玩法时,我们常会遇到多变的需
13、求,有些是显示层面的,有些则是深层的游戏机制。在第 1 章,我们探讨 UI 事件使用方式及底层原理,也会谈到搭建框架的技巧。玩法是游戏的灵魂。在第 2 章,我们将从游戏循环、时间线、动画事件、同步等多个方面来梳理玩法的要点。在第 3 章,我们将讨论游戏中的辅助系统,并分析它们的作用。2游戏架构:核心技术与面试精粹 第第 1 章章 UI交互 除去纪念碑谷这种凤毛麟角的无 UI 游戏,大多数游戏都需要有 UI 交互,甚至一些卡牌游戏就是 UI 游戏,因此开发 UI 的时间占比很大。要认清一点,UI 本身并没有贵贱之分,只是太多的烂设计毁了它的一世清白。“包围效应”就是其中一例。这种设计常见于依靠复
14、杂系统支持的游戏:“我不需要你玩游戏,我只需要你点点点”。在屏幕四周摆满了花花绿绿的图标,使得原本就很小的屏幕变得更加捉襟见肘,配上令人抓狂的红点,足以把任何正常人的理智消磨殆尽,从而稀里糊涂地点下这些凌乱图标中最显眼的充值按钮。在国内游戏市场中,这种游戏遍地开花。而在这些以数值为核心的游戏中,UI 肩负着信息展示与交互的重任。因此,制作 UI 是游戏从业者的必备技能。另一方面,这部分通常比较容易模块化,而且大多能跨项目复用,所以也具备深入讨论的价值。本章依托于 UGUI,主要探讨使用 UI 控件传递事件的相关问题。1.1 绑定事件响应 请列出为 UI 控件绑定事件响应的方法,并分析不同方法之
15、间的优劣。问题分析问题分析 面对问题时,最重要的是确定它的边界。对于这个问题,如何绑定当然是关键,但 UI 控件的范围也很重要。不是所有的UI 控件都能绑定事件,但能绑定的也不是只有按钮,至少还应包含:第 1 章 UI 交互3 拖动条 输入框 开关 滚动区域 当然还有千千万万我们实际工作中用到的自扩展控件。这里不受限于按钮的点击事件,我们用按钮、开关、拖动条三种控件来举例说明。搭建测试搭建测试环境环境 在面临一个新问题时,我们通常会在一个独立的场景中搭建测试环境,来快速验证我们的逻辑是否正确。在这个例子中,我们要在界面中创建三个控件,并摆放到屏幕的中心。创建方法是用右键快捷菜单添加各种控件,相
16、信大家都知道如何操作。如果不熟悉,也可以通过网络很容易地查到。类似的基础操作不是本书的重点,因此针对此类情况,后文大多一笔带过。创建好的界面大概如图 1.1 所示。图 1.1 接着,编写处理函数。在 Unity 中,创建名为 TestEvent.cs 的代码文件,并在场景中创建一个空的 GameObject,将 TestEvent 脚本挂载到 GameObject 上。打开TestEvent.cs,输入如下代码:using UnityEngine;using System.Collections;4游戏架构:核心技术与面试精粹 using UnityEngine.UI;public class TestEvent:MonoBehaviour public void OnBtnClick()Debug.Log(Btn Click);public void OnToggleChange(bool isOn)Debug.Log(Toggle Is+isOn);public void OnSliderChange(float rate)Debug.Log(Slider cur is+rate)