Unity游戏开发入门经典

978-7-115-37912-2
作者: 【美】Mike Geig
译者: 古宏霞
编辑: 傅道坤
分类: Unity

图书目录:

详情

本书采用直观循序渐进的方法,来帮助读者从零开始,掌握使用Unity来开发游戏的整个过程。期间读者会学到如何使用Unity来处理游戏对象、网格、材质和纹理,创建逼真的地形,高效使用相机和灯光,为游戏中的行为编写脚本,创建冲突,使用Unity的物理功能,创建直观的GUI,控制游戏中角色的移动,在游戏中集成音频等功能。

图书摘要

版权信息

书名:Unity游戏开发入门经典

ISBN:978-7-115-37912-2

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    [美] Mike Geig

  译    古宏霞

  责任编辑 傅道坤

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


Mike Geig: Sams Teach Yourself Unity Game Development 2012 in 24 Hours

ISBN: 0672336960

Copyright © 2014 by Pearson Education, Inc.

Authorized translation from the English languages edition published by Pearson Education, Inc.

All rights reserved.

本书中文简体字版由美国Pearson公司授权人民邮电出版社出版。未经出版者书面许可,对本书任何部分不得以任何方式复制或抄袭。

版权所有,侵权必究。


Unity游戏引擎是由Unity Technologies公司开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等内容的跨平台综合游戏开发工具。当前很多热门的游戏(比如Temple Run)都是使用Unity开发的。

本书采用直观易懂的方法,为零基础的读者讲解了游戏开发的基本知识,并通过4个完整的游戏示例来演示Unity游戏开发的方法和技巧。本书分为24章,其内容包括Unity简介、创建和使用游戏对象、高效使用Unity图形资源管线、在3D对象上应用着色器和纹理、利用Unity的地形和环境工具集来生成逼真的游戏世界、使用预制件(prefabs)快速创建可重用的游戏对象、创建直观的游戏用户界面、使用Unity的Shuriken离子系统创建游戏特效、充分使用Unity全新的Mecanim动画系统、在游戏中集成2D/3D环境音效、使用移动设备加速计和多触摸显示屏、将桌面游戏移植道移动平台上,以及部署游戏。

本书适合对使用Unity进行游戏开发感兴趣的零基础读者学习;有过其他游戏平台开发经验,打算向Unity平台转移的读者也可以通过本书迅速上手。


Mike Geig既是一位经验丰富的教师,也是一位经验丰富的游戏开发人员,他在这两个领域都具有很深的造诣。Mike目前在美国斯塔克州立学院和克利夫兰艺术学院教授游戏设计和开发,他还担任Unity Technologies的屏幕录制师,并且是Unity Learn(学习)部门的成员。他的Pearson视频Game Development Essentials with Unity 4 LiveLessons是学习Unity的非常重要的作品。Mike激情洋溢,在Facebook上具有超过100万的“同党”。


非常感谢帮助我编写这本书的每一个人。

首先并且最重要的是,感谢Kara使我一直走在正轨上。我不知道在这本书问世时我们将会谈论些什么,但无论谈论什么,你可能都是对的。爱你,宝贝。

Link和Luke:我们应该让妈妈轻松一小会儿。我认为她快崩溃了。

感谢我的父母。当我自己现在也是一位父亲时,我认识到你们把我抚养长大有多艰难。谢谢您们。

感谢Angelina Jolie。由于您在电影Hackers(1995年)中扮演的角色,我决定学习如何使用计算机。您低估了自己当时对一个10岁孩子的影响,您是一位精英!

感谢牛肉干的发明者:历史可能忘记了你的名字,但是一定不会忘记你的产品。我非常喜欢这种食品,谢谢你!

感谢我的技术编辑:Valerie、Jim和Tim。你们的编校工作和深入的见解在使本书变得更好的过程中起着至关重要的作用。

谢谢你,Laura,是你说服我编写本书。还要谢谢你在GDC给我买午餐,我感觉那份午餐是一日三餐中最好的,它对我写完这本书起到了特别的作用。

最后,还要感谢Unity Technologies。如果你从未创建过Unity游戏引擎,本书将显得非常突兀,并且会让你困惑。


献给我的父亲:您的一切,都值得我学习。


Unity游戏引擎极其强大,因此受到专业人员和业余的游戏开发人员青睐。编写本书的目的是为了使读者能够尽快地熟悉Unity并使用它来工作。同时本书还介绍了游戏开发的一些基本原理。与其他只介绍特定主题或者利用全部篇幅讲解单独一款游戏的图书不同,本书在介绍大量主题的同时仍然设法包含了4款游戏。在你读完本书后,所掌握的不仅仅是Unity游戏引擎方面的理论知识,还将拥有与之配套的游戏开发技能。

本书适合于任何希望学习如何使用Unity游戏引擎的人。无论你是一名学生还是开发人员,都能从本书中学到自己想要的知识。本书不要求读者具备任何游戏开发知识或经验,因此,如果你是第一次涉足创建游戏的艺术这个领域,也不要担心。花一些时间好好享受一下,你将立即开始投入到学习中去。

本书分为24章,每一章应该花大约1小时的时间完成。本书各章分别介绍以下内容。

本书使用的Unity引擎版本为4.1和4.2。对你来说,使用这两个版本的效果几乎完全相同,但是要注意一些视觉元素可能改变了位置。例如,在一些屏幕图像中,你可能注意到Terrain菜单项出现在Unity编辑器顶部的菜单栏中。但在版本4.2中,它移动了位置。涉及地形创建和管理的所有解释都进行了更新,以说明新的进程。之所以在这里指出这一点,是希望在两个版本看上去稍有不同时,你不会感到困惑。

感谢你阅读我为本书写的前言!我希望你享受本书,并从中学到大量的知识。祝你在学习Unity游戏引擎的旅程中好运连连!


在本章中你将学到:

本章的意义在于让你准备好在Unity环境中大显身手。我们首先将探讨不同的Unity许可证,选择其中一种,然后安装它。一旦安装完成,你将学习如何创建新项目以及打开现有的项目。你将打开强大的Unity编辑器,并研究它的多种组件。最后,你将学习使用鼠标控制和键盘命令导航场景。本章打算让你亲自动手实践,因此在阅读时要下载Unity,并遵循相应的学习指导。

要开始使用Unity,首先需要下载并安装它。如今,软件安装是一个十分简单、直观的过程,Unity也不例外。不过,在我们可以安装任何部分之前,需要探讨两个可用的Unity许可证:Unity Free和Unity Pro。Unity Free足以完成本书中的所有示例和项目。事实上,Unity Free包含制作商业游戏所需的一切功能。如果你想要使用更强大的功能(并且愿意花费金钱),Unity Pro提供了一套扩展的工具,可以给你提供真正“高价的”游戏引擎体验。如果对Unity Pro感到好奇,但是不想购买它,Unity Free提供了为期30天的Unity Pro免费试用许可证。你可以随意使用Unity Pro的特性,并且确定它是否适合你。在访问Unity网站时,你可能还会注意到还有Android和iOS插件许可证。从Unity的最新版起,基本的移动插件就是免费的,并且Unity附带有它们。

出于本章的目的,我们将假定你遵循的是Unity Free许可证。如果你使用的是Unity Pro版本,过程将非常相似,唯一的变化是在选择许可证时。当你准备好开始下载并安装Unity时,可以遵循下面这些步骤。

(1)从http://unity3d.com/unity/download/上的Unity3D下载页面下载Unity安装程序。

(2)运行安装程序并遵循提示进行安装,就像安装任何其他的软件一样。

(3) 在提示时,确保保持选中Example Project、Unity Development Web Player和MonoDevelop这些复选框,如图1.1所示。

图1.1 提示选择要安装的组件

(4)为Unity选择一个安装位置,如图1.2所示。建议保留默认的设置,除非你确认自己这么做不会出问题。

图1.2 提示选择安装位置

(5)至此,安装就将要完成了。

(6)在第一次运行Unity时,将要求你激活许可证,如图1.3所示。此时,可以选择你是想使用Unity Free,还是开始为期30天的Unity Pro免费试用。如果你购买了Unity Pro,可以输入序列号以解锁它。我们目前假定你选择的是Unity Free。

图1.3 Unity许可证选择屏幕

(7)提示登录到一个Unity账户,如图1.4所示。如果具有一个Unity账户,可以在此输入它。如果没有,可以选择Create Account选项,并填写必需的表单。

图1.4 提示登录到一个Unity账户

(8)这就行了!Unity安装现在就完成了。

注意:

 

支持的操作系统和硬件

要使用Unity,必须使用Windows PC或Macintosh计算机。尽管可以构建在Linux系统上运行的项目,但是Unity编辑器本身却做不到这一点。你的计算机还必须满足以下最低要求(取自编写本书时的Unity网站上的内容)。

  • Windows:XP SP2或更高版本。Mac OS X:Intel CPU及Snow Leopard 10.6或更高版本。注意:Unity没有在Windows和OS X的服务器版本上测试过。

  • 具有DirectX 9(Shader Model 2.0)能力的显卡,从2004年起生产的任何显卡都适用。

  • 使用遮挡剔除(occlusion culling)需要具有遮挡查询支持的GPU(一些Intel GPU不支持它)。

注意:这些只是最低要求。

警告:

 

Internet链接

所有的Internet链接在编写本书时都是最新的。不过,Web位置有时会改变。如果我给你的链接不再提供你正在寻找的材料,那么使用Internet搜索应该会发现你所寻找的内容。

既然你已经安装了Unity,就可以开始探索Unity编辑器了。Unity编辑器是一种可视化组件,允许以一种“所见即所得”的方式构建游戏。由于大多数交互实际上都发生在我们与编辑器之间,因此通常就把它简称为Unity。本章的下一部分将研究Unity编辑器的各种元素,以及它们如何密切配合来制作游戏。

第一次打开Unity时,看到的第一个窗口是Project对话框,如图1.5所示。我们将使用这个窗口打开最近的项目、浏览已经创建的项目或者开始新的项目。

图1.5 Project对话框

如果已经在Unity中创建了一个项目,那么无论何时打开Unity,它都将直接进入该项目。要返回到Project对话框,可以使用(从Unity里面)File > New Project命令到达Create New Project对话框,或者使用File > Open Project命令到达Open Project对话框。

提示:

 

打开Project对话框

在运行Unity时,将会自动打开你处理的最后一个项目。如果你想打开Project对话框而不是最后一个项目,可以按住Alt键(在Mac上则是Control键),并单击Unity图标。如果想要Unity总是保持这种工作方式,可以使用Edit > Preferences命令,并选中Always Show Project Wizard复选框。

创建我们的第一个项目

 

现在让我们继续前进,并创建一个项目。你想知道在哪里保存项目,以便以后需要时可以轻松地找到它。如图1.6所示,显示了在创建项目之前的对话框的样子。

(1)打开Create New Project对话框。

(2)选择一个保存项目的位置。如果你不知道该把项目存放在哪里,可以保留默认的选项。如果决定选择一个自定义的位置,可以选择一个空文件夹用于存放项目。这个空文件夹将命名为项目的名称。

(3)把项目命名为Chapter1_Trial。项目名称是Project Location文本框中的最后一点文本。

(4)保持Import the Following Packages下的所有程序包都未选中,我们将在后面讨论程序包。

(5)单击Create按钮。

图1.6 用于第一个项目的设置

警告:

 

项目和程序包

起初,你可能忍不住在Create New Project对话框中选择一串程序包。不过,我想警告你的是,不要轻易地在项目中添加程序包,因为不需要的项目可能会增加文件的大小并延缓进度。未使用的程序包只会占据空间,而不会提供任何益处。记住了这一点,就知道更好的做法是:等到确实需要某个程序包时才导入它。即便如此,也只需要导入那个程序包中你打算使用的部分。

迄今为止,我们安装了Unity,并且查看了Project对话框。现在应该深入一步,开始尝试执行一些操作。在第一次打开一个新的Unity项目时,将会看到一堆灰色窗口,称为视图(view),并且所有的内容都在一定程度上是灰色的,如图1.7所示。无需恐惧,我们将迅速使这个位置变得鲜活起来。在下面几节中,我们将逐一探讨每个独特的视图。不过,现在我想作为一个整体讨论Unity界面的布局。

图1.7 Unity界面

对于初学者,Unity允许用户定制他们的工作方式。这意味着任何视图都可以移动、停靠、复制或改变。例如,如果单击单词“Hierarchy”(位于左边)以选取Hierarchy视图,并把它拖到Inspector上(位于右边),就可以把这两个视图叠加在一起。也可以把光标放在视图之间的任何线条上,并调整窗口大小。事实上,为什么不花点时间尝试移动一些内容,以使它们像你所喜欢的那样排列呢?如果最终得到的布局不是你喜欢的样子,也不要感到恐惧。可以使用Window > Layouts > Default Layout命令,快速、轻松地切换回内置的默认视图。虽然我们讨论的是内置布局的主题,但是可以更进一步,并试验几种其他的布局(我是Wide布局的“粉丝”)。如果你创建了一种自己喜欢的布局,总是可以使用Window > Layouts > Save Layout命令把它保存起来。并且,即使你不小心改变了布局,也可以恢复它。

注意:

 

找到合适的布局

没有哪两个人是相同的,同样,没有哪两个人喜欢的布局是相同的。良好的布局有助于处理项目,并使工作容易得多。一定要花时间摆弄布局,找到一种最适合你的布局。你将利用Unity做许多工作,以一种舒适的方式建立环境是有好处的。

如果你想要复制一种视图,它也是一个相当直观的过程。可以简单地右键单击任何视图标签(标签[tab]是显示视图名称的部分),把鼠标光标悬停在Add Tab上,将会弹出一个视图列表,可供你从中选择,如图1.8所示。你可能想知道自己为什么想要复制视图。在疯狂地移动视图时,有可能意外地关闭视图。重新添加标签将会恢复它。此外,考虑创建多个Scene视图的能力。每个Scene视图都可以与项目内的特定元素或轴对齐。如果希望看到它的实际应用,可以使用Window > Layouts > 4 Split命令,检查4种Split内置布局(如果创建了一种你喜欢的布局,就一定要先保存它)。

图1.8 添加新标签

现在,没有更多的骚扰了,让我们查看特定的视图本身。

为一个项目创建的所有内容(文件、脚本、纹理、模型等)都可以在Project视图中找到,如图1.9所示。在这个窗口中,显示了整个项目的所有资源和组织结构。在创建一个新项目时,将会注意到单个名为Assets的文件夹项。如果进入硬盘驱动器上保存项目的文件夹,也会发现Assets文件夹。这是由于Unity利用硬盘驱动器上的文件夹镜像了Project视图。如果在Unity中创建一个文件或文件夹,在资源管理器中将会出现对应的文件或文件夹(反之亦然)。可以通过简单的拖放操作,在Project视图中移动项目。这使你能够在文件夹内放置项目,或者自由地重新组织项目。

图1.9 Project视图

注意:

 

资源

资源是在资源文件夹中作为文件存在的任何项目,所有的纹理、网格、声音文件、脚本等都可以被视为资源。相反,如果创建一个游戏对象,但它没有创建对应的文件,那它就不是资源。

警告:

 

移动资源

Unity将维护与项目关联的多种资源之间的链接。因此,在Unity外面移动或删除项目可能会导致潜在的问题。一般来讲,在Unity里面执行所有的资源管理是一个好主意。

无论何时,在Project视图中单击一个文件夹,都会在右边的Assets区域下面显示该文件夹的内容。如图1.9所示,Assets文件夹目前是空的,因此在右边不会显示任何内容。如果想要创建资源,可以通过单击Create下拉菜单,轻松做到这一点。这个菜单使你能够把各种资源和文件夹添加到项目中。

提示:

 

项目组织

项目组织对项目管理极其重要。随着项目变大,资源的数量也将开始增多,直至查找任何内容都可能变成一件繁重的工作。利用一些简单的组织规则,就可以避免许多问题的产生。

  • 每种资源类型(场景、脚本、纹理等)都应该具有它自己的文件夹。

  • 每种资源都应该位于一个文件夹中。

  • 如果将要在一个文件夹内使用另一个文件夹,就要确保结构是有意义的。文件夹应该变得更具体,而不是含混不清。

遵循这几个简单的规则,便可以带来不同的结果。

在Unity 4中,添加到Project视图中的我最喜爱的特性之一是:添加了Unity Asset Store的收藏夹和集成。Favorites按钮使你能够快速选择某种类型的所有资源,这使得你有可能快速获得资源的“一目了然”的视图。当单击Favorites按钮之一(例如,All Models)或者利用内置的搜索栏执行搜索时,将会看到在Assets与Asset Store之间可以缩小结果的范围。如果单击Asset Store,将能够从Unity Asset Store中浏览适合搜索条件的资源,如图1.10所示。可以按免费资源和付费资源进一步缩小结果的范围。对我而言,这相当于添加了一个极佳的功能,因为它使你无需离开Unity界面,就能够抓取项目所需的资源。

图1.10 搜索Unity Asset Store

如图1.11所示,Hierarchy视图在许多方面都比较像Project视图。它们之间的区别是:Hierarchy视图显示了当前场景而不是整个项目(project)中的所有分项(item)。在第一次利用Unity创建项目时,将会获得默认的场景,除了单个分项即Main Camera之外,其他都是空的。在向场景中添加分项时,它们将出现在Hierarchy视图中。就像Project视图一样,可以使用Create菜单向场景中快速添加分项,使用内置的搜索栏执行搜索,以及单击并拖动项目来组织和“嵌套”它们。

图1.11 Hierarchy视图

提示:

 

嵌套

嵌套(nesting)是用于在两个或更多的分项之间建立关系的术语。在Hierarchy视图中,单击一个分项并把它拖到另一个分项上,将把这个分项嵌套在另一个分项之下,这通常被称为父/子关系。在这种情况下,顶部的对象是父对象,其下的任何对象都是子对象。你将知道一个对象是嵌套于另一个对象之下的,因为它以缩进形式显示。后面将会看到,在Hierarchy视图中嵌套对象可能会影响它们的行为方式。

提示:

 

场景

Unity使用场景(Scene)这个术语来描述你可能已经知道的作为一个关卡的内容。在开发Unity项目时,对象和行为的每个集合都应该是它自己的场景。因此,如果正在利用雪关卡和丛林关卡构建游戏,它们将是单独的场景。

提示:

 

场景组织

在处理新的Unity项目时,应该做的第一件事是在Project视图中的Assets下面创建一个Scenes文件夹。这样,将把所有的场景(或关卡)存储在相同的位置。一定要给场景提供一个描述性的名称。Scene1现在听起来像是一个非常好的名称,但是当具有30个场景时,它可能会令人混淆。

Inspector视图使你能够查看当前所选项目的所有属性。从Project或Hierarchy视图中简单地单击任何资源或对象,Inspector视图将自动传播相关的信息。

如图1.12所示,可以查看在Hierarchy视图中选择了Main Camera对象之后的Inspector视图。

让我们分解它的一些功能。

图1.12 Inspector视图

警告:

 

在运行场景时更改属性

更改对象的属性并且查看那些立即反映在运行场景中的更改能力非常强大。它使你能够完全动态地调整诸如运动速度、跳跃高度、碰撞力度之类的属性,而无需停止和启动游戏。不过,要小心谨慎。在场景运行时对对象属性所做的任何更改都将在场景结束时更改回来。如果执行了更改并且喜欢所得到的结果,就一定要记住它是什么,以便在场景停止时可以再次设置它。

Scene视图是你将使用的最重要的视图,因为它使你能够在构建游戏时可视化地查看它,如图1.13所示。使用鼠标控制和几个热键,可以在场景内四处移动,并且在需要的地方放置对象。这给你提供了一种极佳的控制级别。

稍后,我们将讨论在场景内四处移动,但是,首先让我们重点关注作为Scene视图一部分的控件。

图1.13 Scene视图

注意:

 

打开场景小工具

场景小工具在Scene视图上提供了许多功能。可以看到,该控件具有与坐标轴对齐的X、Y和Z指示器。这使得很容易准确判断你在场景中观看的是哪个方向。在后面一章中将讨论轴和3D空间。小工具还允许主动控制场景的对齐方式。如果单击小工具的其中一根轴,将会注意到Scene视图立即贴紧那根轴,并且被放置到某个方向,比如顶部或左边。单击小工具中心的方框,将在Iso模式与Persp模式之间切换。Iso代表Isometric,它是没有应用透视的3D视图。与之相反,Persp代表Perspective,是应用了透视的3D视图。自己试试它,查看它是如何影响Scene视图的。

注意:

 

不同的版本,不同的按钮

如果使用Unity 4.2或之前的版本,场景视图菜单看上去如图1.13所示的那样。不过,如果使用Unity 4.3或之后的版本,它们看上去将稍有不同。不要担心,选项仍然都在那里,它们现在只是位于Effects下拉菜单之下。你还可能注意到一个新的2D按钮,在前面的图像中没有显示出它。这个按钮支持使用Unity新增的2D能力。不过,由于本书重点关注的是3D游戏,目前还不需要关心这些选项。

我们将要查看的最后一个视图是Game视图。实质上讲,Game视图通过提供当前场景的完全模拟,允许在编辑器内“玩”游戏。游戏的所有元素都将在Game视图中正常工作,就像完全构建了项目一样。图1.14显示了Game视图的样子。注意:尽管从技术上讲Play、Pause和Step按钮不是Game视图的一部分,但是它们可以控制Game视图,因此把它们包括在图像中。

图1.14 Game视图

提示:

 

丢失的Game视图

如果发现Game视图隐藏在Scene视图后面,或者Game视图选项卡完全消失了,不要担心。一单击Play按钮,Game视图选项卡就会出现在编辑器中,并且开始显示游戏。

Game视图带有一些控件,可以帮助我们测试游戏。

注意:

 

运行、暂停和关闭

最初可能难以确定运行(running)、暂停(paused)和关闭(off)这些术语的含义。当没有在Game视图中执行游戏时,就称游戏是关闭的。当游戏处于关闭状态时,游戏控件将不会工作,并且不能播放游戏。当按下Play按钮时,游戏开始执行,就称游戏正在运行。播放、执行和运行都意味着同一件事。如果游戏正在运行,并且按下Pause按钮,游戏就会停止运行,但是仍将维持它的状态。此时,游戏就处于暂停状态。暂停的游戏与关闭的游戏之间的区别是:暂停的游戏将从暂停它的位置恢复执行,而关闭的游戏则将从起始位置开始执行。

工具栏尽管不是一个视图,但它是Unity编辑器的一个不必可少的部分。图1.15显示了工具栏的组件。

图1.15 工具栏

Scene视图允许对游戏的构造进行诸多控制。可视化地放置和修改项目的能力非常强大。不过,如果不能在场景内四处移动,所有这些将没有非常大的用处。本节将介绍两种不同的方式,用于更改位置和导航Scene视图。

Hand工具(热键:Q)提供了一种简单的机制,利用鼠标四处移动Scene视图,如图1.16所示。如果使用的是单键鼠标,那么这个工具被证明特别有用(因为其他方法都需要双键鼠标)。表1.1简要解释了Hand工具的每种控制方式。

表1.1 Hand工具的控制方式

动作

效果

单击并拖动

在场景中四处拖动摄像机

按住Alt键,然后单击并拖动

使摄像机围绕当前枢轴点转动

按住Ctrl键(在Mac上是Command键),然后右键单击并拖动

推近或拉远摄像机

图1.16 Hand工具

在下面这个网址上可以找到所有的Unity热键:

http://blogs.unity3d.com/2011/08/24/unity-hotkeys-keyboard-shortcuts-in-unity/

警告:

 

不同的摄像机

在Unity中工作时,将与两类摄像机打交道。第一类是标准的游戏对象摄像机,可以看到在场景中已经具有这样的摄像机(默认情况);第二类更多的是一种假想的摄像机,从传统意义上讲它不是一种摄像机,相反,它确定了我们在Scene视图中可以看到什么。在本章中,在提及摄像机时,所指的都是第二类摄像机。你将不会实际地操纵游戏对象摄像机。

Flythrough模式使你能够使用传统的第一人称控制模式在场景中四处移动。对于任何玩第一人称3D游戏(比如第一人称射击游戏)的人来说,这种模式都让他们有一种宾至如归的感觉。如果你没有玩过那些游戏,可能要花点时间习惯这种模式。不过,一旦你熟悉了它,它就会变成一种习性。

按住鼠标右键将进入Flythrough模式。表1.2展示的所有动作都需要按住鼠标右键。

表1.2 Flythrough模式控制

动作

效果

移动鼠标

导致摄像机围绕枢轴转动,这提供了在场景内“四处查看”的感觉

按W、A、S、D键

W、A、S、D键用于在场景内四处移动。其中每个键分别对应一个方向:前、左、后、右

按Q、E键

Q、E键分别用于在场景内上、下移动

在按住Shift键的同时按下W、A、S、D键或Q、E键

与以前具有相同的效果,但它要快得多。可以把Shift键视作你的“全速移动”按钮

提示:

 

缩放

无论使用哪种方法进行导航,滚动鼠标滚轮总会在场景内缩放视图。默认情况下,场景将从Scene视图的中心进行放大或缩小。不过,如果在滚动时按住Alt键,就会放大或缩小鼠标当前指向的任何内容。继续前进并试验一下它!

提示:

 

贴紧控制

可以用多种方式精确控制场景导航。不过,有时,你只想在场景中四处转转。对于像这样的情况,使用所谓的贴紧控制(snap control)就很好。如果想要快速导航到或者放大场景中的某个游戏对象,可以高亮显示Hierarchy视图中的对象并按下F键。你将注意到场景“贴紧”到那个游戏对象。另一种贴紧控制是你已经见过的。场景小工具允许快速把摄像机贴紧到任何一根轴。这样,就可以从任意角度查看对象,而不必手动四处移动场景摄像机。一定要学习贴紧控制,并且利用它们快速导航场景就变成了一种贴紧操作!

本章首先探讨了Unity游戏引擎,并通过下载和安装Unity开始这个过程。接着,你学习了如何打开和创建项目。然后,你学习了组成Unity编辑器的各种不同的视图,还学习了如何导航Scene视图。

问:资源和游戏对象是一样的吗?

答:不完全一样。基本上讲,它们之间最大的区别是:资源在硬盘驱动器上具有对应的文件或文件组,而游戏对象则不具有。资源可能会也可能不会包含游戏对象。

问:有许多不同的控件和选项,我需要立即把它们都记住吗?

答:根本不需要。大多数控件和选项都已经设置为涵盖了大多数情况的默认状态。随着你对Unity的认识进一步加深,可以继续学习关于可供你使用的不同控件的更多知识。本章只打算让你了解Unity编辑器中具有什么,并在一定程度上熟悉它们。

花一些时间做完这里的问题,确保你完全掌握了本章所学的知识。

1.判断题:你必须购买Unity Pro才能制作游戏。

2.哪种视图使我们能够可视化地操纵场景中的对象?

3.判断题:总是应该在Unity内四处移动资源文件,而不应该使用操作系统的文件浏览器。

4.判断题:在创建一个新项目时,应该包括每种你认为极好的资源。

5.当按住鼠标右键时,在Scene视图中进入的是哪种模式?

1.错误。

2.Scene视图。

3.正确。

4.错误。

5.Flythrough模式。

花点时间练习一下本章中所学的概念。从根本上稳固理解Unity编辑器很重要,因为本书的一切知识都会以某种方式利用它。为了完成这个练习,可以执行以下操作。

1.使用File > New Scene命令或者按下Ctrl+N组合键(在Mac上是Command+N组合键),创建一种新场景。

2.在Project视图中的Assets下面创建一个Scene文件夹。

3.使用File > Save Scene命令或者按下Ctrl+S组合键(在Mac上是Command+S组合键),保存场景。一定要在你创建的Scenes文件夹中保存场景,并给它提供一个描述性的名称。

4.向场景中添加一个立方体。为此,可以单击顶部的GameObject菜单,把鼠标放在Create Other上,并从弹出式菜单中选择Cube命令。

5.在Hierarchy视图中选择新添加的立方体,并在Inspector视图中试验它的属性。

6.练习使用Flythrough模式、Hand工具和贴紧控制在Scene视图中四处导航。使用立方体作为参照点,帮助你进行导航。


在本章中你将学到:

游戏对象是Unity游戏项目(project)的基本组件。场景中存在的每个分项(item)都是或者都基于游戏对象。在本章中,你将学习Unity内的游戏对象。不过,在开始与Unity中的对象打交道之前,必须先学习2D和3D坐标系统。然后,将开始与内置的Unity游戏对象打交道,在本章最后,将学习多种不同的游戏对象变换。在本章中获得的信息对于本书其余各章是基础性的,一定要花时间学好它。

华丽而富有魅力的视频游戏其实都是数学构造。所有的属性、运动和交互都可以归结为数字。对你来说幸运的是,许多地基都已经打好了。数学家们辛苦工作了几个世纪,发现、发明和简化了不同的过程,以便你可以利用现代的软件轻松地构建游戏。你可能认为游戏中的对象只是随意地存在于空间中,但是实际上每种游戏空间都具有维度,并且每个对象都放置在一种坐标系统(或网格)中。

如前所述,每一款游戏都会使用某种级别的维度。你最有可能熟悉的最常见的维度系统是2D和3D,它们分别是二维(two-dimensional)和三维(three-dimensional)的简写形式。2D系统是一个平面系统。在2D系统中,只处理垂直和水平元素(或者换句话说是:上、下、左、右)。像Tetris、Pong和Pac Man这样的游戏就是2D游戏的良好示例。3D系统就像2D系统一样,但它显然多一个维度。在3D系统中,不仅具有水平和垂直方向(上、下、左、右),还具有深度(里和外)。图2.1在阐释2D正方形和3D正方形(另称为立方体,cube)方面做了很好的工作。注意在3D立方体中包括有深度轴,使之就像是“凸出”的一样。

图2.1 2D正方形与3D立方体

注意:

 

学习2D和3D

Unity是一个3D引擎。因此,利用它创建的所有项目天生都使用三维系统。你可能想知道为什么我们要麻烦地完全涵盖2D系统。事实是:甚至在3D项目中,仍然有许多2D元素。纹理、屏幕元素和绘图技术都使用2D系统。学习2D系统是值得的,因为它们不会很快消失。

维度系统在数学上等价于坐标系统。坐标系统使用一系列直线(称为轴,axis)和位置(称为点,point),这些轴直接对应于它们模拟的维度。例如,2D坐标系统具有x轴和y轴,它们分别代表水平和垂直方向。如果在水平方向上移动一个对象,就称之为“沿着x轴”移动。同样,3D坐标系统使用x轴、y轴和z轴,分别代表水平、垂直和深度。

注意:

 

常用的坐标系统

在谈到对象的位置时,一般都会列出它的坐标。称对象在x轴上是2并且在y轴上是4可能有点麻烦。幸运的是,存在一种书写坐标的简写方式。在2D系统中,采用(x, y)这样的形式书写坐标。在3D系统中,则把它们写成(x, y, z)的形式。因此,将代之以把这个示例写作(2, 4)。如果那个对象还在z轴上是10,则将把它写作(2, 4, 10)。

每种坐标系统都具有所有的轴相交的点。这个点称为原点(origin),原点的坐标在2D系统中总是(0, 0),在3D系统中则是(0, 0, 0)。这个原点非常重要,因为它是得到其他所有点的基础。其他任何点的坐标都只是那个点沿着每根轴相距原点的距离。当移动某个点使之远离原点时,那个点的坐标将变大。例如,右移一个点时,它的x轴的值将变大;左移它时,x轴的值将变小,直到它经过原点为止。此时,点的x值将再次开始变大,但它也会变成负数。如图2.2所示,这个2D坐标系统定义了3个点。点(2, 2)在x方向上和y方向上都距离原点2个单位(unit)。点(−3, 3)位于原点的左边及其上方都是3个单位。点(2, −2)位于原点的右边及其下方都是2个单位。

图2.2 点与原点的关系

你现在学习了游戏世界的维度以及组成它们的坐标系统。迄今为止使用的坐标系统被认为是世界(world)坐标系统。在任何给定的时间,在世界坐标系统中都只有一根x轴、y轴和z轴。同样,所有的对象都共享唯一一个原点。你可能不知道的是,还有一种所谓的局部(local)坐标系统。这个系统对于每个对象都是独特的,并且它与其他对象完全分隔开。这个局部系统具有它自己的轴和原点,其他对象不会使用它们。图2.3通过为每种坐标系统显示构成一个正方形的4个点,阐释了世界坐标系统与局部坐标系统之间的区别。

图2.3 世界坐标系统与局部坐标系统

你可能想问:如果世界坐标系统用于对象的位置,那么局部坐标系统是用于什么的呢?在本章后面,将探讨变换游戏对象以及设置游戏对象的父对象。它们都需要使用局部坐标系统。

Unity游戏中的每种形状、模型、灯光、摄像机和粒子系统等都具有一个共同点:它们都是游戏对象。游戏对象是任何场景的基本单元。虽然它们比较简单,但是它们非常强大。归根究底,游戏对象差不多就是一种变换(将在本章后面更详细地讨论)和一个容器。这个容器用于保存多种使对象更动态、更有意义的组件。至于向游戏对象中添加什么,这取决于你自己。有许多组件,它们添加了大量的多样性。在整本书中,你将学习使用其中许多组件。

注意:

 

内置的对象

你使用的每个游戏对象在开始时并非都是一个空对象。Unity具有多个内置的游戏对象可以开包即用。单击Unity编辑器顶部的GameObject菜单项,并把光标悬停在Create Other上,就可以看到有大量的项目可用。学习使用Unity的很大一部分就是学习处理内置的和自定义的游戏对象。

创建一些游戏对象

现在让我们花一些时间处理游戏对象。你将创建几个基本的对象,并且检查它们的不同组件。

(1)创建一个新项目,或者在已经具有的项目中创建一个新场景。

(2)单击GameObject菜单项并选择Create Empty命令,添加一个空游戏对象(注意:也可以通过按下Ctrl+Shift+N组合键(PC用户)或者Command+Shift+N组合键(Mac用户),来创建空游戏对象)。

(3)查看Inspector视图,将会注意到你刚才创建的游戏对象除了一种变换之外,将没有其他组件。所有的游戏对象都具有一种变换。在Inspector视图中单击Add Component按钮,将会显示可以添加到对象中的所有组件。此时不要选择任何组件。

(4)单击GameObject菜单项,把光标悬停在Create Other上,并从列表中选择Cube命令,在项目中添加一个立方体。

(5)注意立方体具有空游戏对象所不具有的多种组年。网格(mesh)组件使立方体可见,碰撞器(collider)则使之能够与其他对象交互。

(6)最后,在Hierarchy视图中单击Create下拉菜单,并从列表中选择Point Light命令,在项目中添加一个点光源(point light)。

(7)可以看到点光源没有与立方体共享任何组件,而是把注意力完全放在发光上。你还可能注意到:当把灯光添加到场景中时,其他对象将变暗。这是正常的,因为场景中存在灯光,所以Unity会关闭它的环境光照。

至此,你学习并且探索了不同的坐标系统,并且试验了一些游戏对象。现在应该把它们二者融合起来。在处理3D对象时,经常会听到变换(transform)这个术语。依赖于上下文,变换要么是一个名词,要么是一个动词。3D空间里的所有对象都具有位置、旋转和比例。如果把它们都结合起来,就会得到对象的变换(名词)。此外,如果变换指的是更改对象的位置、旋转或比例,那它就可以是一个动词。Unity把它的两种含义与变换组件(transform component)结合起来,回忆可知变换组件是每个游戏对象都必须具有的唯一组件。每个空游戏对象都具有变换。使用这个组件,可以查看对象的当前变换以及改变(或变换)对象的变换。这现在听起来可能令人糊涂,但它相当简单,要不了多久你就会了解它。由于变换由位置、旋转和比例组成,改变变换就分别对应于平移、旋转和缩放。这些变换可以使用Inspector或变换工具实现。图2.4和图2.5显示了哪些Inspector组件和工具与哪些变换相关联。

图2.4 Inspector中的变换选项

图2.5 变换工具

在3D系统中改变对象的坐标位置称为平移(translation),这是可以应用于对象的最简单的变换。在平移一个对象时,将沿着轴移动它。图2.6演示了一个沿着x轴平移的正方形。

图2.6 平移示例

当选择Translate工具(热键:W)时,将注意到所选的任何对象在Scene视图中将稍微有所改变。更确切地讲,将会看到3个箭头出现,它们沿着3根轴从对象的中心指向外面。这些是平移小工具,它们有助于在屏幕上四处移动对象。单击并按住其中任何一个轴箭头将导致它们变成黄色。然后,如果移动鼠标,对象将沿着那根轴移动。图2.7显示了平移小工具的样子。注意,这个些工具只会出现在Scene视图中,如果位于Game视图中,将不会看到它们。

图2.7 平移小工具

提示:

 

变换组件和变换工具

Unity提供了两种方式来管理对象的变换。知道何时使用每种方式很重要。你将注意到:当利用变换工具在Scene视图中改变对象的变换时,变换数据也会在Inspector视图中改变。使用Inspector视图通常更容易对对象的变换执行较大的改变,因为可以只更改它们所需要的值。不过,变换工具对于快速、较小的改变更有用。学习结合使用这两种方式将可以极大地改进工作流程。

旋转一个对象不会在空间中移动它。相反,它会改变对象与那个空间的关系。更简单地讲,旋转使你能够重新定义x轴、y轴和z轴对于特定的对象指向的是哪个方向。图2.8显示了一个围绕z轴旋转的正方形。

图2.8 围绕z轴旋转

提示:

 

确定旋转的轴

如果不确定需要围绕哪根轴旋转对象以获得想要的效果,就可以使用一种简单的方法。一次围绕一根轴旋转,假装对象就像是通过与那根轴平行的针固定在某个位置一样。对象只能围绕固定它的针旋转。现在,确定哪个针允许对象以你想要的方式旋转,它就是旋转对象所需要的轴。

就像Translate工具一样,选择Rotate工具(热键:E)将导致旋转小工具出现在对象周围。这些小工具是圆形,代表对象围绕轴的旋转路径。单击并拖动其中任何圆形都将把它们变成黄色,并围绕那根轴旋转对象。图2.9显示了旋转小工具的样子。

图2.9 旋转小工具

缩放将导致对象在3D空间内扩展或收缩。这种变换在使用时确实比较直观和简单。在任何轴上缩放一个对象都将导致它的大小在那根轴上改变。如图2.10所示,在x轴和y轴上缩小一个正方形。图2.11显示了当选择Scaling工具(热键:R)时缩放小工具的样子。

图2.10 在x轴和y轴上缩放

图2.11 缩放小工具

如前所述,变换使用局部坐标系统。因此,所做的改变可能潜在地影响将来的变换,如图2.12所示。注意当以相反的顺序应用两种相同的变换时,它们将具有非常不同的效果。

图2.12 变换顺序的效果

可以看到,不注意变换顺序将可能产生意料之外的后果。幸运的是,变换具有可以计划的一致效果。

一旦理解了这些规则,就很容易确定一组变换将如何改变对象。

在第1章中,你学习了如何在Hierarchy视图中嵌套游戏对象(把一个对象拖到另一个对象上),并且这样做将稍微改变变换的工作方式。回忆可知:当把一个对象嵌套在另一个对象内时,顶级对象是父对象,而另一个对象是子对象。应用于父对象的变换将像正常的那样工作。对象可以移动、缩放和旋转。特别的是子对象的行为方式。一旦嵌套,子对象的变换就是相对于父对象进行的。因此,子对象的位置不是基于它与原点的距离,而是它与父对象的距离。如果旋转了父对象,子对象将随之移动。不过,如果查看子对象的旋转,它根本不会记录自己旋转过了。对于缩放也是如此。如果缩放父对象,子对象也会改变大小。子对象的缩放将保持不变。你可能感到迷惑的是为什么会这样。记住,当应用变换时,不是把它应用于对象,而是应用于对象的坐标系统。旋转的不是对象,而是它的坐标系统,其效果就相当于对象旋转了。当子对象的坐标系统基于父对象的局部坐标系统时,对父对象所做的任何改变都将直接改变子对象(而无需子对象知道它)。

在本章中,你学习了关于Unity中的游戏对象的知识。首先学习了2D与3D之间的区别。接着,你查看了坐标系统,以及它如何从数学上分解“世界”的概念。然后,你开始处理游戏对象,包括一些内置的游戏对象。最后,你学习了有关变换的知识以及3种变换方式。你试验了一些变换,认识了一些风险,以及它们如何影响嵌套的对象。

问:同时学习2D和3D概念重要吗?

答:是的。甚至完全3D的游戏在技术层面仍然会利用一些2D概念。

问:我应该立即学习使用所有内置的游戏对象吗?

答:不必如此。有许多游戏对象,尝试立即全部学习它们将可能令人崩溃。花一些时间学习这里介绍的对象即可。

问:熟悉变换的最佳方式是什么?

答:练习。坚持不断地使用它们;最终,它们将变得相当自然。

花一些时间做完这里的问题,确保你完全掌握了本章所学的知识。

1.2D和3D中的“D”代表什么?

2.变换有多少种?

3.判断题:Unity没有内置的对象,必须创建你自己的对象。

4.如果你希望“把对象的一边放在”距离它的当前位置的右边5个单位,你是将旋转对象然后平移它,还是将平移对象然后旋转它?

1.维度。

2.3种。

3.错误。Unity为你提供了许多内置的对象。

4.平移然后旋转。

花点时间在父对象/子对象场景中试验变换的工作方式,将可以更好地理解坐标系统将如何精确地改变对象的定位方式。

1.创建一个新的场景或项目。

2.在项目中添加一个立方体,并把它放在(0, 2, −5)处。记住坐标的简写表示法。立方体应该具有以下坐标值:x=0、y=2、z=−5。在Inspector视图中的变换组件中可以轻松地设置这些值。

3.在场景中添加一个球体,注意球体的xyz值。

4.在Hierarchy视图中把球体拖到立方体上,从而把球体嵌套在立方体下。注意位置值是如何改变的。球体现在是相对于立方体定位的。

5.把球体放在(0, 1, 0)处。注意它不会出现在原点的正上方,而是位于立方体的正上方。

6.现在试验多种变换。一定要在立方体以及球体上试验它们,查看它们对于父对象与子对象的影响有何不同。


相关图书

Unity游戏开发入门经典(第4版)
Unity游戏开发入门经典(第4版)
Unity  3D游戏开发技术详解与典型案例
Unity 3D游戏开发技术详解与典型案例
从零开始:快速入门Unity 3D游戏开发
从零开始:快速入门Unity 3D游戏开发
Unity 3D脚本编程与游戏开发
Unity 3D脚本编程与游戏开发
AR开发权威指南:基于AR Foundation
AR开发权威指南:基于AR Foundation
VR与AR开发高级教程:基于Unity(第2版)
VR与AR开发高级教程:基于Unity(第2版)

相关文章

相关课程