Unity 4 3D开发实战详解
上QQ阅读APP看书,第一时间看更新

2.1 Unity集成开发环境的整体布局

本节将对 Unity 集成开发环境的整体布局做详细的介绍与说明,使读者理解各个布局的作用与用途,使读者对Unity集成开发环境有一个整体化的了解。

2.1.1 Unity集成开发环境的整体布局

Unity 集成开发环境的默认布局分隔为一系列不同的面板和带有标签的窗口。每个窗口都显示了编辑器某一方面的细节,并允许开发者在开发游戏时使用不同的功能。如果读者曾经使用过一款三维建模程序或是其他的游戏编辑器,会发现它们有些相似。

双击Unity的快捷方式,进入Unity集成开发环境,其整体布局为标题栏、菜单栏、工具栏、场景设计面板、游戏预览面板、游戏组成对象列表、项目资源列表、属性查看器、提示栏和控制台,如图2-1所示。

说明

读者可以根据自己的爱好和实际需要来创建自己的布局。可以在每个面板或者窗口的标签处按住鼠标左键,把面板或者窗口拖到适当的位置后松开鼠标左键。布局完成后可以在Window→Layouts→Save Layout保存自己的布局。如果布局被不小心弄乱了,可以通过Window→Layouts找到自己的布局来恢复。

2.1.2 标题栏

标题栏是用于显示所打开的项目文件的名称,右侧有所常见的最小化、最大化和关闭按钮,单击不同的按钮,执行不同的操作,如图2-2所示。

▲图2-1 Unity集成开发环境的整体布局

▲图2-2 标题栏

2.1.3 菜单栏

菜单栏中包含File、Edit、Assets、GameObject、Component、Terrain、Window和Help菜单,如图2-3所示,每个菜单下还有子菜单,读者可以根据需要选择不同的菜单,实现所需要的功能。

▲图2-3 菜单栏

● File(文件)菜单:打开和保存场景、项目,以及创建游戏。

● Edit(编辑)菜单:普通的复制和粘贴功能,以及选择及其相应的设置。

● Assets(资源)菜单:与资源创建、导入、导出以及同步相关的所有功能。

● GameObject(游戏对象)菜单:创建、显示游戏对象以及为其建立父子关系。

● Component(组件)菜单:为游戏对象创建新的组件或属性。

● Terrain(地形)菜单:为游戏场景创建并编辑地形。

● Window(窗口)菜单:显示特定视图(例如,项目资源列表或游戏组成对象列表)。

● Help(帮助)菜单:包含到手册、社区论坛以及激活许可证的链接。

提示

现在读者只需要了解每个菜单中所包含的常见功能,稍后用到时,将会对各个功能给出更为详细的介绍。

2.1.4 工具栏

工具栏位于菜单栏的下方,主要有交换工具,变换Gizmo切换,播放控件,分层下拉列表和布局下拉列表,如图2-4所示。

● Transform(变换)工具:在场景设计面板中用来控制和操纵对象。按照从左到右的次序,它们分别是Hand(移动)工具、Translate(平移)工具、Rotate(旋转)工具和Scale(缩放)工具。

▲图2-4 工具栏

● Transform Gizmo(变换Gizmo)切换:改变场景设计面板中Translate工具的工作方式。

● Play(播放)控件:用来在编辑器内开始或者暂停游戏的测试。

● Layers(分层)下拉列表:控制任何给定时刻在场景设计面板中显示那些特定的对象。

● Layout(布局)下拉列表:改变窗口和视图的布局,并且可以保存所创建的任意自定义布局。

提示

控制工具也是按照功能分类的,它们主要用来辅助读者在场景设计面板和游戏预览面板中进行编辑和移动,在后面的章节将进行更为完整的介绍。

2.1.5 场景设计面板

场景设计面板是编辑器中最重要的面板之一,其是游戏世界或是关卡的一个可视化表示,如图2-5所示。在这里可以对游戏组成对象列表中的所有物体进行移动、操纵和放置,创建供玩家进行探险和交互的物理空间。

▲图2-5 场景设计面板

正如读者所看到的,在游戏组成对象列表中列出的对象都会在场景设计面板中显示出来。可以在游戏组成对象列表中单击对象的名字来选中游戏对象,或是在场景设计面板中手动单击它。在场景设计面板或是游戏组成对象列表中单击不同的对象,将会在属性查看器中显示该对象所对应的数据。

说明

如果读者在游戏组成对象列表中可以看到对象列表,但是场景设计面板看上去空空如也,可能是读者的场景设计面板缩得太小了,以至于无法看到各个资源。要修正这个问题,可以在游戏组成对象列表中选中某个对象,移动鼠标指针并让它悬停在场景设计面板上,随后按F键来放大显示。

1.摄像机导航

学会怎样在场景设计面板中迅速移动,是使用编辑器所需要掌握的最重要的方面之一(如果读者会使用Autodesk Maya,很可能会熟悉这些控制方法)。

可以把场景设计面板想象成为一个虚拟摄像机的输出或焦点。为了在场景中进行移动,读者需要移动摄像机的视野,就好像读者在看着不同的对象。

● Tumble(旋转,Alt+鼠标左键):摄像机会以任意轴为中心进行旋转,从而旋转视图。

● Track(移动,Alt+鼠标中键):在场景中把摄像机向左、向右、向上和向下移动。

● Zoom(缩放,Alt+鼠标右键或是鼠标滚轮):在场景中缩小或放大摄像机视角。

● Flythrough(穿越)模式(鼠标右键+WASD键):摄像机会进入“第一人称”模式,使得读者可以在场景中迅速地移动和缩放。

● Center(居中,选择游戏对象并按 F 键):摄像机会放大并把选中的对象居中显示在视野中。鼠标光标必须位于场景设计面板中,而不是在游戏组成对象列表中的对象上方。

● Full Screen(全屏)模式(空格键):按下空格键可以使得当前激活的视图占据编辑器所有可用的显示空间。再次按下它可以返回之前的布局。当前激活的视图就是鼠标光标所悬停的视图。

● Tumble(Alt+鼠标键):摄像机会以任意轴为中心进行旋转,从而旋转视图。

● Track(鼠标键):在场景中把摄像机向左、向右、向上和向下移动。

● Zoom(Ctrl+鼠标键):在场景中缩小或放大摄像机视角。

场景设计面板还包含一个名为 Persp 的特殊工具,如图 2-6 所示。这一特殊工具可以使读者迅速地切换观察场景的角度。

▲图2-6 切换摄像视角工具

单击 Persp 上的每个箭头都会改变观察场景的角度,使其沿着一个不同的正交或是二维方向变换,例如,上、后、前、右,如图 2-7 所示。单击这一 Persp 中的居中立方体图标,可以把场景设计面板恢复到默认的透视(Perspective)视图。

▲图2-7 各个主要的方向视图

提示

如果读者更习惯于使用与默认颜色不同的颜色来表示游戏世界的坐标轴,可以依次单击Edit→Preferences→Colors项,然后修改读者喜欢的任何颜色。

2.高级视图操作

场景设计面板的控制栏可以改变摄像机查看场景的方式,如图2-8所示。其默认设置可以使读者对于场景在游戏中渲染后的样子有一个很好的认识,它还会显示一个网格以帮助读者定位和移动对象。

▲图2-8 场景设计面板的控制栏

● 第一个下拉列表(绘制模式)可以控制在游戏场景中对象是怎样绘制的。默认值为Textured (带有贴图的)——即对象会使用读者为其指定的颜色或贴图进行绘制;单击这个菜单把绘制模式修改为Wireframe(线框)会显示对象的物理网格,而不带有任何贴图。

提示

这些选择中的任何一个都不会改变游戏的显示方式,它只会改变你在场景设计面板中查看这些对象的方式。

● Textured Wire(带有贴图的线框)会把对象的贴图和它们的线框叠加在一起显示。Render Modes(渲染模式)下拉列表对开发者所开发游戏场景中的对象进行微调,进而优化是非常有用的;Lightmap Resolution(光照贴图分辨率)会在场景上覆盖棋盘格来显示光照贴图的分辨率。

● 默认值(RGB)会以通常情况下带有颜色的方式来显示所有的对象;Alpha会使用对象的Alpha值来显示场景中的所有对象,即用灰度图显示;Overdraw模式会显示场景中有多少时间是消耗在重复绘制上;Mipmaps会试图显示对象所使用的最理想的贴图大小。

说明

灰度图:场景中完全不透明的对象会用白色渲染,完全透明的对象会用黑色渲染,半透明的对象会使用不同深度的灰色渲染。

● Scene Lighting(场景光照)按钮可以在场景设计面板是使用默认的内置光照还是使用读者自己实现的光照之间来回切换。如果读者没有在场景中放入任何光源,使用内置光照设置会比较有用。

● 最后一个切换按钮 Scene Overlay(场景叠加)可以对摄像机进行更新,使得场景的显示方式就像在游戏中一样——网格隐藏了,其他的效果(如雾化效果、GUI 元素以及天空盒)也会渲染。

3.操作对象

除了把摄像机视角四处移动以外,还需要在场景中重新定位和移动对象。这些操作称为对象变换(object transform),它们可以处理任意选中对象的位置、旋转和大小(相对尺寸)。

对象变换方式有以下两种方式:可以在属性查看器中为这些变换输入新的值,也可以通过变换工具手动地移动和操作这些对象。

● 在游戏组成对象列表或者场景设计面板中单击Camera对象,以使其信息显示在属性查看器中,如图2-9所示。每个对象列出的第一个属性就是变换,它保存了该对象当前的位置、旋转和缩放。单击这些输入框中的任意一个进行输入,以修改里面的数字。Unity的基本单位是米。

▲图2-9 属性查看器

提示

也可以通过Transform工具来对对象进行变换。读者可以手动地在工具栏中选择一个工具,也可以使用下一节介绍的热键在工具之间快速切换(强烈推荐)。

● 图2-10中所示的Translate工具可以在场景中移动选中的对象的位置,可以沿着3条坐标轴中的某一条移动,也可以在整个空间自由移动。在游戏组成对象列表中单击Sphere对象并且按W键来激活移动工具。抓住其中的一个手柄,可以把对象沿着该坐标轴在游戏世界中移动。

● 也可以通过单击该工具的中心(或是这个对象自身)在场景中拖动,以将这个对象沿着所有3条坐标轴自由地移动。然而,这通常不是最好的方法,因为读者不能精细地控制放置的位置。读者会发现,在不同的正交视图(例如,前视、右视)中切换,对于精确地放置对象有很大的帮助。

▲图2-10 移动游戏对象

提示

属性查看器中的值会根据读者的修改而进行更新,并实时在Scene面板中显示修改后的效果。

● 图2-11中所示的Rotate工具可以把对象按照任何给定的坐标轴进行旋转。单击Sphere对象并按E键来激活这一工具。这个工具的手柄就好像3个带有颜色的环包着一个球体。拖动这些手柄或者直接拖动鼠标就可以旋转对象。

▲图2-11 旋转游戏对象

● 这个工具的手柄就好像3个带有颜色的环包着一个球体。拖动这些手柄或者直接拖动鼠标光标就可以旋转对象。

注意

这些环的颜色指明了这个对象会按照哪条轴来旋转。例如,如果拖动蓝色的手柄,这个球体就会沿着z轴旋转。这一工具还有一个简单的黄色环围绕在另外3个环的外侧。可以单击并拖动这个黄色的环来让对象按照所有的3条坐标轴进行旋转。

● 最后一个变换工具是Scale工具,可以在键盘上按R键来激活它,如图2-12所示,这个工具和Translate工具的用法很相似——可以拖着一个手柄,把这个对象在这条坐标轴上缩放,或者使用中间的黄色方块来把对象在所有3条坐标轴上一致地缩放。

▲图2-12 缩放游戏对象

说明

使用这个工具对网格进行缩放是有风险的。这看上去像一个非常快速的方法,可以用来改变任何资源的大小,但是,如果使用太多缩放过的对象或是把贴图拉伸到完全不相称的地步,这可能会影响游戏的性能。调整缩放最好的方法就是,确保3D应用程序中的网格在最开始时其大小就是正确的。

2.1.6 游戏预览面板

在默认的Tall布局下,游戏预览面板位于Scene标签旁边的标签上。在这里,游戏会按照就像是最后构建并发布时一样进行渲染。可以在任何时候使用这个视图在编辑器内测试或试玩游戏,而不需要停下来构建任何东西,如图2-13所示。

▲图2-13 游戏预览面板图

提示

虽然现在看这好像不是很重要,但是当读者开始要调整或是平衡成千上万个小细节的时候,能够自由地在编辑器和游戏中随时切换真是太重要了。

要测试游戏,可以选择按下工具栏上的播放控件中的各个按钮,实现相关的操作,如图2-14所示。

● 播放控件中第一个右箭头的按钮,即运行按钮,编辑器会激活游戏预览面板,并且让所有的用户界面变得略微黑一些,然后开始游戏。

● 中间的按钮为“暂停”按钮,即暂停游戏。再次按下“暂停”按钮可以从暂停的地方开始游戏。

● 最后一个按钮是“单帧”(Step)按钮,其使得开发者可以在游戏中一帧一帧地移动。当开发者需要调试某个特定的、有问题的代码补丁,或是需要看看某些东西在哪里出现错误时,这非常有用。

游戏预览面板和场景设计面板一样,其也具有控制栏,如图2-15所示。

▲图2-14 播放控件

▲图2-15 游戏预览面板控制栏

● Aspect(任意显示比例下拉列表),可以实时改变游戏预览面板的显示比例,即使游戏正在运行。Free Aspect(任意显示比例)下拉列表允许游戏预览面板填满当前窗口中所有可用的空间,而其他的选项会模拟最常见的显示器的分辨率和比例。

注意

当需要为不同大小的屏幕制作GUI时,这会非常方便。

● 单击Maximize on Play(进行游戏时最大化)切换按钮,可以在开始运行游戏时把游戏预览面板扩大到编辑器视图的整个区域。

注意

不能在游戏正在运行时改变这个切换按钮的状态;需要先停止游戏并且重新开始游戏,以更新这个修改。

● 单击 Gizmos(工具)按钮,可以切换游戏中绘制和渲染的所有工具。目前,场景中没有任何工具,所以现在它并不能做什么。然而,以后读者可能使用一些定制的工具来表示游戏中一个特定的区域,并且读者可能想要总是精确地看到这个区域的边界在哪里,即使是在游戏进行时。

● 控制栏上的最后一个按钮可以显示Render Statistics(渲染数据)页面。当开始优化游戏时,这非常有用。现在,只需要知道这是一种快速查看游戏帧速率(Frame Per Second,FPS)的方式,后面的章节会更加详细介绍它。再次单击Stats按钮可以隐藏渲染数据页面。

说明

帧速率是一个常见的指标,它可以告诉用户游戏运行得是否流畅。如果帧速率过低的话,游戏运行画面会显得比较卡。

2.1.7 游戏组成对象列表

项目资源列表列出了游戏中所有可用的对象和文件,游戏组成对象列表仅仅列出了那些真正会在当前场景中用到的对象。场景中的这些对象是简单按照字母顺序排列的,随着读者在游戏中添加或者删除对象,游戏组成对象列表会随着每次修改而进行更新。

在游戏组成对象列表中选择一个对象并按Delete键(或是右击并选择Delete键),可以从游戏的当前场景中删除这个对象,图2-16显示了当前场景设计面板中的内容。

提示

一个资源的每个实例(一个副本或者一次出现)都会独立地列出来,这使得良好的命名规范变得尤为重要,命名的规范也就是达到见名知意的目的。

在游戏组成对象列表中为对象建立父子关系,可以对其进行组织并使得对游戏的编辑修改更为简单。当为对象建立父子关系时,基本上就是将一组无关的对象收集到一起并建立分组,使它们位于一个单一的对象(父对象)之下。在该父对象之下的所有其他对象,都称为孩子或者子对象,如图2-17所示。

▲图2-16 游戏组成对象列表

▲图2-17 游戏组成对象列表中的父子关系

说明

在这个例子中,一个名为GameObject的资源就是父对象,有3个子对象位于其下:Sphere、Cube和Plane。单击GameObject旁边的箭头可以展开或是收起这一分组,这就好像Project视图中的文件夹一样。

建立父子关系除了会提供一种快捷方式来把相似的对象组织在一起以外,还带来了另一个重要的好处,即对父对象进行移动或是操作,也会依次地对其下所有的子对象进行同样的操作。

也就是说,子对象继承了父对象的数据。然而,仍然可以对子对象进行独立于其他子对象和父对象的编辑,这使得你有了更多的控制权。

如果读者仍然无法确切地理解父子关系,可以想象一下一个普通人的身体。手臂以身体作为父对象,手以手臂的末端作为父对象。向前移动身体(父对象)也会让手臂随着它移动,这也会依次移动手(手臂和手是两个子对象)。然而,也可以对手进行移动和旋转而不需要移动身体和手臂。

提示

为对象建立父子关系,可以使得对大量的对象的移动变得更为方便和精确,因此,读者应该尽可能地使用这种方法。后续的章节将会介绍建立父子关系的一些更为高级的概念。

2.1.8 项目资源列表

项目资源列表中列出了项目中的所有文件(脚本、对象、场景、任何文件),并且这些文件都组织到一个Project文件夹中,每个Project文件夹都会包含一个Assets(游戏资源)文件夹。Assets文件夹包含读者所创建的对象或是导入的资源,包括网格(mesh)、贴图、脚本、摄像机、关卡等,如图2-18所示,项目资源列表显示了这个Project文件夹及其所包含的Assets文件夹。

项目资源列表显示了这个项目所包含的全部资源,并且这些资源在项目中的组织方式与读者计算机硬盘上的组织方式完全一致。文件夹旁边的箭头表示这是一个嵌套层,单击某个箭头会展开该文件夹的内容。在项目资源列表中简单地单击和拖曳,就可以在不同文件夹中移动和组织文件。

提示

在Unity编辑器外部移动资源文件时要非常小心,实际上,应该不惜一切代价避免这样做。如果需要重新组织或移动某个资源,读者应该在项目资源列表内部进行。否则的话,可能会损坏或是删除和这个资源相关联的源数据或是链接,甚至可能在此过程中损坏项目。

也可以在项目资源列表中直接打开文件并对其进行编辑。如果发现需要对任何文件的内容(如一个脚本文件)进行调整或是修正,只须双击这个文件就可以在默认编辑器中打开它。正常地保存这个文件,就会让Unity把它重新导入到项目里。

如果项目包含了成百上千或是成千上万个文件,读者可能会发现通过眼睛自己去找到某个文件非常不方便,甚至是完全不可能的。好在可以在搜索栏中输入文件名的任何部分,以便在项目各个层次的子目录中进行查找。

说明

要重命名一个文件或者文件夹,可以缓慢地左击其名字两次(和通常的快速双击不同),或是选择想要重命名的文件并按F2键。当完成重命名后,可以按Enter键。

在项目资源列表中右击,会弹出一些高级选项,包含导入资源和外部项目控制器同步以及资源包操作,如图2-19所示。后续章节会更深入地介绍这些内容。

▲图2-18项目资源列表

▲图2-19 项目资源列表中的高级选项

提示

所有带标签的窗口都有一个名为 Windows Options(窗口选项)的下拉框,可以用来最大化所选中的视图,或是关闭当前显示的标签视图,或是在这个窗口中添加另一个带标签的视图。单击该图标可以弹出可用的选项。

2.1.9 属性查看器

属性查看器显示游戏中每个对象所包含的详细信息,如图2-20所示。单击Plane对象,其详细内容会显示在属性查看器中。

在属性查看器中一般包含很多属性信息,这乍看上去有点让人无所适从,但是,每个对象对应的所有属性查看器都遵循一些基本原则。在属性查看器的顶端是这个对象的名称,然后是该对象的各个方面的一个列表,例如,Transform(变换)和Mesh Collider(网状碰撞体)。

提示

这些不同种类的属性中的每一个都会在稍后给出更为详细的介绍,但是到目前为止,只需要知道在这里可以任意修改对象所拥有的属性信息。

属性查看器中的每个属性都有与其对应的帮助按钮和上下文菜单。单击帮助按钮会显示参考手册中和这个属性相关的文档,读者可以挑选这些属性中的任意一个尝试一下。单击上下文菜单会显示仅仅与该属性相关的选项,也可以在此把这个属性重置为其他默认值。

▲图2-20 属性查看器

2.1.10 状态栏与控制台

控制台和状态栏是Unity集成开发环境中两个很有用的调试工具,如图2-21所示。状态栏总是出现在编辑器的底部。可以通过菜单Window→Console或按Ctrl+Shit+C快捷键打开控制台,也可以单击状态栏来打开控制台。

▲图2-21 工作中的控制台和状态栏

当按下“播放”按钮开始测试项目或是导出运行项目,在状态栏与控制台都会显示出相关的提示信息,也可以在脚本中让项目向控制台和状态栏输出一些信息,这有助于调试和修复错误。项目遇到的任何错误、消息或者警告,以及和这个特定错误相关的任何细节,都会显示在这里。

2.1.11 动画视图

现在 Unity 还包含一个动画视图,读者可以在这里查看或是调整动画曲线。这个窗口在默认情况下并不打开,但是,可以通过Window→Animation或是按Ctrl+6快捷键来查看它,如图2-22所示。动画视图会作为一个单独的浮动窗口弹出,读者可以四处移动它或是改变其大小。现在,这个窗口是空的,因为场景中没有包含任何动画。

▲图2-22 动画视图

提示

在稍后的章节中,读者会看到如何使用这个视图来查看动画剪辑或者在3D动画应用程序之外更新数据。