1.5 Unity中定义的重要概念
本节介绍Uinty中的一些概念,也许在其他的游戏引擎中是没有这些概念的,而要掌握Unity游戏引擎的用法,这些概念就不能不知道。
1.5.1 资源(Assets)
在Unity游戏的制作开发过程中,需要用到各种各样的资源,这些资源包括模型、贴图、声音、程序脚本等。在Unity中,可以把资源(Assett)比喻成游戏制作过程中的原材料,通过原材料的不同组合和利用,便形成了一个游戏产品。
1.5.2 工程(Project)
在Unity中,工程就是一个游戏项目。这个工程包括了该游戏场景所需要的各种资源,还有关卡、场景和游戏对象等。在创建一个新的游戏之前,必须先创建一个游戏工程。游戏工程可以想象成实现游戏的工厂。它里面有游戏的资源仓库、制作游戏的装配间和打包输出的车间等。
1.5.3 场景(Scenes)
场景可以想象成一个游戏界面,或者一个游戏关卡。在一个打开的场景中,游戏开发者通过编辑器为该场景组装各种游戏资源,这些资源被放置到场景中之后成为一个个游戏对象,通过这些游戏对象实现该游戏关卡中的各种功能。场景相当于制作游戏过程中不同部分的不同车间,在不同的车间中,搭建不同的场景。
1.5.4 游戏对象(GameObject)
游戏对象是组成游戏场景必不可少的对象。各种各样的游戏对象通过资源的组装并加入到游戏场景中,只有某种资源被放置在游戏场景中,才会生成游戏对象。游戏对象根据功能的需要有不同的属性,用户通过这些属性来控制游戏对象的不同行为。
1.5.5 组件(Component)
组件,在Unity中是用于控制游戏对象属性的集合。每一个组件包括了游戏对象的某种特定的功能属性,例如Transform组件,用于控制物体的位置、旋转和缩放。可以通过组件中的参数来修改物体的属性,甚至你通过编写一个脚本程序并把该程序添加到游戏对象中,成为它的一个组件,并利用监视器(Inspector)来编辑你想要的属性值。简而言之,组件其实定义了游戏对象的属性和行为。
接下来,请大家来看一下这张图(图1-158),它表示出了使用Unity制作的游戏的一个层次结构。
图1-158 Unity工程层级结构
1.5.6 脚本(Scripts)
我们知道,游戏与其他娱乐方式(电影、图书、电视、广播等)的最大区别在于可互动性。互动性是游戏的最基本特征之一,而程序脚本便是实现可互动性的最有利的工具。通过编写程序可以控制游戏中的每一个游戏对象,我们可以让他们根据我们的需要改变他们的状态和行为。在Unity中,使用最多的脚本语言是JavaScript和C#。当然也可以使用C/C++、Java等高级语言为它编写第三方插件。
在编写游戏脚本的时候,我们可以不用关心Unity的底层原理,我们只要调用Unity为我们提供的API,便可以完成出色的游戏产品。而且,你在Unity中同时使用C#和JavaScript脚本进行编写,也并不会影响它的运行,只是这两种语言的语法稍微有些不同而已。
在编写程序的时候,挑选合适的程序编辑器是提高编程效率的方法之一。我们可以使用Microsoft Visual Studio编辑器或者使用Unity自带的MonoDevelop脚本编辑器来编写代码。当然你也可以使用其他编辑器,例如Ultra Editor或者文本编辑器等来编写脚本。但是,笔者建议采用前面的两种编辑器。
1.5.7 预置(Prefabs)
有的时候我们会在Unity中为游戏对象添加各种组件,并设置好它的属性和行为,最后需要反复利用这些已经修改好的对象。Unity为我们提供了一种保存这种设置的方法,该种方法称为保存预置(Prefab)。它使得我们在场景中编辑过后的游戏对象重新保存成一个Prefab对象,成为一种资源。这个Prefab可以在不同的地方不同的场景重复使用这些保存了的设置。通过预置,我们可以在游戏过程中动态地生成该预置使其成为场景中的游戏对象。例如,你按下鼠标的左键表示发射炮弹,这个炮弹已经通过添加各种组件,并设置好了它的属性,最后保存成一个预置,我们可以通过脚本实时地生成一个我们修改好的炮弹对象并加入到场景中。
在使用预置的过程中还有一个好处,便是同步性。当你在游戏场景中有很多的由该预置生成的游戏对象时,你通过修改其中一个游戏对象的属性,并运用到这个预置中,场景中所有的由该预置生成的游戏对象的属性也会同时改变。