图书前言

前  言

虽然我从事游戏编写工作已很长时间了,但最近才开始使用Unity。当我开始开发游戏时,Unity 尚未出现,它的第1 版在2005 年发布。从一开始,它就承诺要作为游戏开发工具,但直到发布了几个版本,它也没有实现诺言。iOS 和Android 等平台(统称为“移动”平台)是后来才出现的,这些平台在很大程度上促成了Unity 日益突出的地位。

最初,我将Unity 视为一个有趣的开发工具,我关注它,但并不真正使用它。那段时间,我在为桌面计算机、网站编写游戏,为各种客户端开发项目。我使用过Blitz3D和Flash 等工具,它们很适合编程,但有诸多限制。随着这些工具开始过时,我一直在寻找更好的游戏开发方法。

我从Unity 3 开始体验,后来在Synapse Games 的开发工作中就完全转向了Unity。最初是为Synapse 开发网页游戏,最终转向了移动游戏。然后,我们进入游戏开发的完整生命周期,因为Unity 使我们能够从同一个代码库部署到网页和移动平台!

我一直认为分享知识很重要,讲授游戏开发课程也有好几年了。这么做的主要原因是很多导师和老师的言传身教对我的影响(顺便说一句,我的老师Randy Pausch 是如此鼓舞人心,他在2008 年去世前不久发表了名为The Last Lecture 公开演讲)。我曾在多所学校授课,而我一直以来都想写一本关于游戏开发的书。

本书的许多方面都是我第一次学习Unity 时所期望获得的学习内容。Unity 的众多优点之一是有大量有价值的学习资源,但这些资源比较零散(诸如脚本参考或独立的教程),需要读者进行深度挖掘才能找到需要的内容。最好有一本书,能把需要了解的所有内容都放在一起,以清晰、合乎逻辑的方式呈现出来,这就是本书的目标。本书的读者对象是对Unity 很陌生的编程老手,以及游戏开发新手。书中选取的项目则反映了我通过快速连续地完成各种自由项目获得技能和信心的经验。

学习使用Unity 开发游戏是一次激动人心的冒险。对我来说,学习如何开发游戏意味着要忍受很多麻烦;但对读者而言,拥有了本书则意味着拥有了一份清晰简明的学习资源。

关 于 本 书

本书适用对象

本书介绍如何使用Unity 编写游戏。有经验的程序员可以把它当成Unity 的入门书籍。本书的目标十分明确:带领有一些编程经验但没有Unity 经验的读者使用Unity开发游戏。

讲授开发最好的方式是完成示例项目,学生通过制作示例来学习,这正是本书采用的方式。本书的各个主题展现为构建游戏示例的步骤,当浏览本书时,鼓励读者在Unity 中构建这些游戏。不同于其他书籍,本书每几章便挑选不同的项目来讲解,而不是整本书只开发一个项目。其他有些书籍采用“一个完整项目”的方法进行讲解,

不足之处是如果对前面的章节不感兴趣,就很难跳到中间的章节。

本书比大多数Unity 书籍(特别是入门书籍)都更加注重严格的编程内容。Unity 通常被描述成不需要编程的功能集合,这是一个错误的观点,它无法让人们明白制作一款商业游戏都需要学会哪些知识。如果不知道如何编写计算机程序,最好先使用“免费互动编码”网站(详见链接[1])之类的资源进行学习,学习完编程后再回来看本书。

不必担心具体的编程语言,本书通篇使用了C#,但其他编程语言的技能也可以派上用场。本书的第Ⅰ部分会占用一定篇幅介绍新的概念,并仔细地引导读者在Unity中开发第一款游戏,但剩下的章节将更快地推进,让读者了解多种游戏类型的项目。

本书最后会描述如何将游戏部署到各种平台(如Web 和移动平台),但本书的重点不会涉及最终的部署目标,因为Unity 与平台无关。

至于游戏开发的其他方面,艺术学科的广泛覆盖会减少本书专业方面的介绍,而涉及更多的Unity 外部软件(例如,所使用的动画软件)。所以关于美术任务的讨论将仅限于Unity 或所有游戏开发者都应知道的方面(请注意,附录C 是关于自定义对象建模的)。

学习路线图

第1 章 介绍跨平台的游戏开发环境——Unity。你将学习Unity 中所有对象所基于的组件系统,以及如何编写和运行基本脚本。

第2 章 演示在3D 中编写移动示例的步骤,涵盖鼠标和键盘输入等主题。全面解释3D 位置和旋转的定义和管理。

第3 章 将移动示例转变为第一人称射击游戏,讲解射线投射和基础AI。射线投射(向场景投射一条线,并观察相交情况)是所有类型游戏中很有用的操作。

第4 章 涵盖了美术资源的导入和创建。本章不关注代码,因为每个项目都需要(基本)模型和贴图。

第5 章 学习如何在Unity 中创建2D 益智游戏。尽管Unity 开始时仅包括3D 图形,但现在也能很好地支持2D 图形。

第6 章 用平台游戏机制扩展2D 游戏。特别是,实现玩家的控制、物理和动画。

第7 章 介绍Unity 中最新的GUI 功能。每个游戏都需要UI,而最新版本的Unity为创建UI 提供了一个改进的系统。

第8 章 展示如何在3D 中创建另一种移动游戏,此时从第三人称的视角看到场景。实现第三人称控制将展示一系列3D 数学操作,学习如何使用带动画的角色。

第9 章 浏览如何在游戏中实现交互设备和物品。玩家有很多方式操作这些设备,包括直接触摸它们,接触游戏中的触发器,或者是按下控制器的某个按钮。

第10 章 涵盖了如何与互联网通信。学习如何使用标准互联网技术来发送和接收消息。例如HTTP 请求,从服务器获取XML 或JSON 数据。

第11 章 介绍如何编写音频功能。Unity 对短音效和长音轨提供了很好的支持,这两种类型的音频对于所有电子游戏都很重要。

第12 章 将不同章节的碎片整合到一个游戏中。此外,你还将学习如何编程实现“点击”控制,以及如何保存玩家的进度。

第13 章 构建最终应用并发布到多个平台,如桌面、网页和移动,甚至VR。总之,Unity 使你能够为每个主流的游戏平台创建游戏。

本书最后还提供了4 个附录,分别介绍场景导航、外部工具、Blender 和学习资源。

关于代码和链接

本书的所有源代码,不管是代码清单或是片段,都使用等宽字体,以便与周围的文本区别开来。在大多数代码清单中,代码都通过注释指出关键概念,而编号有时用于在文本中提供关于代码的额外信息。代码是经过格式化的,通过合理地增加换行和缩进,以适应本书可用的页面空间。

学习本书唯一需要的软件是Unity,本书使用的是Unity 2020.3.12,它是编写本书时的最新版本。某些章节偶尔讨论其他软件,但那些仅作为可选的额外部分,而非核心的学习内容。

警告 Unity 项目会记住它们是在哪个版本的Unity 中创建的,如果尝试在不同版本的Unity 中打开它们,会显示警告。如果打开本书下载的示例时看到警告,请单击Continue 按钮并忽略它。

本书的代码清单通常展示了在已有的代码文件中应该添加或修改的内容,除非是首次出现的代码文件,否则不要用后来的清单覆盖整个文件。尽管可以下载书中引用的完整示例项目,但最好手动输入代码清单中的内容,并观察所引用的示例。可从GitHub(见链接[2])下载书中的示例,也可扫描本书封底的二维码获取本书的示例文件。

在此要说明的是,读者在阅读本书时会看到一些有关链接的编号,形式是数字编码加方括号,例如,[1]表示读者可扫描封底二维码下载Links 文件,在其中可找到章节中的[1]所指向的链接。