1.4 开始一个关卡
现在已经创建了一个Unity的项目,并且利用Unity的标准资源包导入了一个很大的资源库,包括一些建筑类网格,例如墙、地板、天花板、楼梯等,将使用这些资源建立第一个关卡(level)。记住,在Unity中,一个场景(Scene)往往也就意味着一个关卡。场景和关卡这两个词汇在这里是没有区别的,都是指一个三维空间,也就是游戏发生的时空。现在来创建一个金币采集游戏的场景,首先从应用程序菜单依次选择“File | New”,或者也可以在键盘上按下“Ctrl + N”组合键。当完成了这个操作之后,一个新的空白的场景就被创建好了。可以在占据了Unity开发界面最大部分的场景(Scene)选项卡中看到场景的预览,如图1.14所示。
注意
如图1.14所示,在Unity中的场景(Scene)选项卡以外的其他选项卡也是可见的,并且可以使用的。这些选项卡包括游戏(Game)选项卡和动画(Animator)选项卡。有时,选项卡的数目可能会更多。不过现在可以忽略除了场景以外的其他所有选项卡。场景(Scene)选项卡是为了能够在游戏的开发中简单快速地查看一个关卡。
每一个新的场景都是空的,严格来说几乎是空的。默认情况下,每一个新的场景都是由两个对象开始的,首先添加一个用来照亮其他任意对象的光源对象(Light),然后是一个用来从特定角度对场景中的内容进行显示和渲染用的摄像机(Camera)。可以使用开发界面(见图1.15)左侧的层次(Hierarchy)面板来查看所有在场景中对象的完整列表。这个面板上显示了场景中所有对象的名称。在Unity中,游戏对象的含义就是在场景中存在的单一、独立的东西,无论它们是可见的还是不可见的,例如网格、光源、摄像机、道具等。因此,只有从层次(Hierarchy)面板才能看到游戏场景中的一切。
注意
也可以通过在层次(Hierarchy)面板中单击游戏中对象的名称来选中它们。
接下来为这个场景添加一个地面(Floor)。要知道,游戏中的玩家总得站在一些东西上面。可以使用第三方的建模软件(如Maya、3DS Max或者Blender)来创建一个地面网格。不过,在之前导入过的标准资源包中就含有可以使用的地面网格,这是相当方便的。这些网格都是原型软件包(Prototyping Package)的一部分。如果想通过项目(Project)面板完成对这些资源的访问,可以双击打开“Standard Assets”文件夹,然后访问“Prototyping | Prefabs”文件夹。如图1.16所示,可以看到这些对象,并从检查(Inspector)面板中对它们进行预览。
注意
你也可以在应用程序菜单上依次选择GameObject|3D Object|Plane,这样可以更加方便地向场景(Scene)中添加地面(Floor)。不过,加进来的这个地面看起来一片灰暗,给人一种枯燥无味的感觉。当然,这个地面的外观是可改变的。正如我们在后面即将看到的一样,Unity中允许对物体外观进行改变。不过,在本书中,我们将从项目面板(Project panel)中的标准资源包里找到一个专门的地面网格(floor mesh)来使用。
图1.16所示的名为“FloorPrototype64x01x64”的网格十分适合作为一个地面,现在只需要简单地将项目(Project)面板(Panel)中的对象拖曳到场景(Scene)视图中,然后释放鼠标即可完成这个网格的添加工作,如图1.17所示。当在进行这个操作时要注意,在三维空间中新添加了网格之后,场景(Scene)视图中发生的变化,同时也要注意到这个网格的名称也出现在了层次(Hierarchy)面板的列表中。
至此,现在项目(Project)面板上的网格资源已经被实例化为一个场景中的物体。这意味着一个项目(Project)面板上的副本已经作为一个独立的游戏对象加入到了场景之中。地面的实例(或者对象)依附于项目(Project)面板中的“floor”资源。但是反过来,这些资源却并不依附这些实例。这意味着当在场景中删除这些实例(或者游戏对象)时,这些资源并不会被删除。反之,当删除了这些资源时,场景中的这些实例就会被删除。如果场景中需要更多的地面,就可以多次从项目(Project)面板中向场景(Scene)视图拖动“floor”资源。每进行一次这种操作,都会在场景中添加一个单独的游戏物体。虽然这些游戏物体都依附于同一个“floor”资源,但是它们相互之间都是独立的(见图1.18)。
实际上,并不需要这么多重复的地面,所以先把它们删除。删除这些地面的方法是先在场景(Scene)视图中逐个单击这些“floor”对象,然后在键盘上按下删除键。另外记住,也可以通过单击层次(Hierarchy)面板上这些游戏物体的名字,然后按下删除键。不管使用的是哪一种方法,如今在场景中都只剩下了唯一一个“floor”对象。现在还有一个问题,那就是这个“floor”对象的名字问题。在层次(Hierarchy)面板上可以清楚地看到这个“floor”对象的名字是“FloorPrototype64x01x64”,这个名字很长,意义又不够明确,而且调用的时候又不方便。因此应该将这个名字改为一个更容易管理的,而且意义更明确的,这样才能使工作更加有条理,也更容易管理。Unity中有很多种可以将对象重命名的方法,首先选中对象,然后在其检查(Inspector)面板中的名称字段处输入新的名字。这里将这个对象重命名为“WorldFloor”,如图1.19所示。