本章节我们来认识一下Unity的主界面,如下所示
Unity的主界面虽然看的内容比较多,但是结构上还是比较清晰地,所以并不乱。从上到下,从左到右依次是菜单栏,工具栏,层次面板(Hierarchy),场景视图(Scene),游戏视图(Game),检视面板(Inspector),工程面板(Project)以及控制台面板(Console)。关于这些面板的中文翻译,我们不用纠结太多,主要还是记住对应的英文名称即可。
这些面板或视图都是做什么用的呢?
1.层次面板是场景中游戏对象的列表显示,游戏场景中任何可见的物体都是游戏对象。
2.场景视图可用于可视化的场景编辑,即所见所得的方式去摆放场景中的任何游戏对象。
3.游戏视图就是游戏运行后的界面效果(类似场景视图),单击 三角形 Play 即可运行游戏。
4.检视面板可用于查看和编辑当前所选游戏对象的所有属性,我们经常在这里操作。
5.工程面板显示可在当前工程中使用的文件,包括模型,贴图,材质,脚本以及资源库。
首先,我们先介绍层次面板(Hierarchy)和场景视图(Scene),如下图所示
左边就是层次面板(Hierarchy),右边就是场景视图(Scene)。请注意,Scene和Game是两个Tab选项卡,我们可以点击他们两个可以切换场景视图和游戏视图。如下所示
之所以将两个视图以这种方式进行布局,是因为两者非常的相似,都是显示游戏内容的。当然,这个不是重点,我们回到层次面板中,我们可以看到如下内容
SampleScene是Unity自动帮我们创建的一个场景,该场景下有两个游戏对象,一个是主摄像机Main Camera,另一个是平行光Directional Light(其实还有一个默认的天空盒)。
什么是场景?这个词可能更多的用于电影拍摄。简单的理解,它就是演员拍摄一个片段时候的环境背景。场景在游戏开发中,也是类似的概念。一个场景可以理解为一个独立的游戏世界。每个场景都有自己的自然环境、建筑环境、角色环境、UI界面等等。这个场景里面的世界可以很大,也可以很小。场景与场景之间是隔离的(因为他们本身就是两个不同的文件),我们的游戏角色不可能从一个场景“无缝的行走”到另一个场景中。一般情况下,我们可以将整个游戏世界划分成几个不同的场景,当然我们也可以将整个游戏世界构建一个大场景(无缝大地图)。Unity会将每一个场景保存为后缀为“unity”的场景文件。该场景文件默认保存在“Assets/Scenes”目录下,当然我们也可以保存到其他位置。 个人理解,仅供参考!
什么是游戏对象?熟悉编程的人,都应该知道面向对象编程,这是现在大部分高级编程语言的共同特征。类是描述事物的抽象模板,类被实例化(在计算机内存中存在)后就是一个个的对象。那么,游戏对象也是同理。我们在游戏世界中看到的任何事物(或者说物体),都是一个个的游戏对象。我们之所以能够看到他们,就是因为他们被实例化出来,客观存在于计算机内存世界中。上文中的摄像机和平行光就是两个游戏对象。当然,我们要创建丰富多彩的游戏世界,就需要创建更多的游戏对象,比如山川河流,树木花草,楼宇亭榭,飞禽走兽等等。可由可见,在一个场景中可能会有成千上万的游戏对象。这些游戏对象大部分都是3D模型,它们基本上都是由3ds max或maya等软件制作完成后导入到Unity中的。我们需要在Scene 视图中来“摆放”这些模型(也就是这些游戏对象)。个人理解,仅供参考!
Hierarchy层次面板中的游戏对象和Scene 场景视图中的游戏对象是一致的,只不过一个是列表形式展示,一个是三维形式展示。如果我们在 Scene 视图中添加或移除游戏对象,也会从 Hierarchy 层次面板添加或移除它们。反之,也是一样的效果。如果我们在Hierarchy 层次面板选中一个游戏对象的话,在Scene 场景视图中也会被选中。如下所示
以上我们选中的是“Main Camera”主摄像机游戏对象。
以上是我们选中“Directional Light”平行光游戏对象。
这里重点说的是,Unity的游戏对象之间可以形成父子关系。一个子游戏对象可以继承父游戏对象的属性,并且移动父游戏对象时,会同步移动其子游戏对象。当然,这种操作还包括旋转和缩放,也就是世界三大变换。这个对我们游戏开发帮助非常大。
我们在层次面板中有“Main Camera”主摄像机和“Directional Light”平行光两个游戏对象,在对应的场景视图中,我们就能看到摄像机和平行光这两个游戏对象,如下所示
如果看不见的话,可以滚动鼠标中间的滚轮来放大和缩小场景视图。我们就能看见有一个类似摄像机的标识和一个类似太阳的标识,他们就是主摄像机和平行光。摄像机的作用是采集游戏世界的内容输出到Game视图,而平行光的作用就是模拟太阳光,照亮整个游戏场景。
当场景中的游戏对象非常多的时候,我们为了能够准确的找到指定游戏对象,就需要一些方便的操作。例如,我们可以在层次面板中找到这个游戏对象(这个操作还是比较简单的),然后我们将鼠标“移动到(不要点击)”到场景视图中,然后按下“F”键就可以在场景视图中显示这个游戏对象了。这个操作类似于3ds max中的“Z”键。另外,我们还可以在层次面板中控制游戏对象的隐藏和显示,该操作并不会影响对象在游戏中的可见性。
图片中眼睛的标识就是用来控制游戏对象的隐藏和显示的,也可以选中游戏对象后按快捷键H来切换隐藏和显示(非常的方便)。当我们不想让某个游戏对象干扰我们当前的操作时候,就可以通过这个“眼睛”来暂时隐藏这个游戏对象。这可用于处理难以查看和选择特定游戏对象的大型或复杂场景。注意,使用可见性选项比禁用游戏对象更安全,因为可见性选项仅影响 Scene 视图。另外,如果我们选中某个游戏对象的时候,使用快捷键Shift + H的话,就会进入Isolation 视图,该视图中只会显示当前选中的游戏对象。这样做的目的是方便我们集中精力对这些选定的游戏对象进行编辑,而不会被其他游戏对象所干扰。要退出 Isolation 视图只需要再次按下 Shift + H,或者单击 Scene 视图中的 Exit 按钮。
其实说白了,Isolation 视图就是只显示选中游戏对象,隐藏其他的游戏对象而已。
接下来,我们介绍场景视图中的工具栏。
第一个,场景视图的绘制模式,默认为Shaded为正常显示游戏物体;Wireframe线框形式显示游戏物体;Shaded Wireframe混合正常和线框形式显示游戏物体;其他就不介绍了。
第二个,2D按钮开启2D模式,一般是制作UI和2D游戏的时候使用,方便操作而已。
第三个,灯光按钮用来控制场景中的灯光开启和关闭,不是关闭游戏中的灯光。
第四个,声音按钮用来控制场景中的音频的开启和关闭,不是关闭游戏中的声音。
第五个,效果按钮控制是否显示天空盒,雾和光晕等效果。
Skybox:场景中显示天空盒。
Fog:场景中显示雾效果。
Flares:显示光源上的镜头光晕效果。
Always Refresh:定义动画化的材质是否显示动画。
Post Processing:显示后期处理效果。
Particle Systems:显示粒子系统效果。
第六个,隐藏游戏对象的数量
第七个,是否显示栅栏格(类似3ds max的栅栏格)
第八个,是否在场景视图中显示组件编辑面板(右边第一个按钮)
第九个,场景视图的摄像机编辑按钮(不是场景里面的那个Main Camera)。
第十个,Gizmos控制物体标记的显示和隐藏。
第十一个,搜索栏,搜索场景中的游戏对象,搜索到的物体会高亮显示。
关于场景视图的介绍就到这里。
接下来,我们介绍Game视图。
点击三角Play按钮,就会运行游戏工程,自动切换到Game视图,如下所示
我们在Game视图中看到的内容,就是Main Camera拍摄到的场景内容,只有灰色的地面和蓝色的天空。其实,我们可以把Main Camera看做玩家的眼睛。玩家看到的游戏世界,就是由Main Camera来呈现的。请注意的是,摄像机和平行光在游戏视图中是看不到的,它们是用来辅助我们创建游戏场景的,并不是玩家能够看见的游戏对象。
接下来,我们简单介绍Game视图工具栏。
第一个,Display1应该是显示器,默认会将游戏内容输出到Display1。
第二个,Free Aspect设置显示屏幕宽高比或者固定分辨率,也可以手动添加新的分辨率。
第三个,Scale缩放,调节当前游戏视图的缩放比例。
第四个,播放时最大化,点击此项,游戏视图最大化显示。
第五个,音频静音,控制游戏中音频的开启和关闭。
第六个,状态窗口,该小窗口显示游戏运行的一些信息。
第七个,Gizmos,控制游戏物体标记的显示和隐藏,与场景中的Gizmos相似。
这里我们简单说一下状态窗口,网格对象上的顶点数越多,网格对象的外形越细腻,但是过多的顶点会占用大量的CPU和GPU资源。开发游戏时,可以在游戏视图的stats面板中查看顶点数目的统计信息。
Tris代表三角面的数量,Verts代表顶点的数量。
最后我们在说一下关于Scene场景视图和Game游戏视图的关系理解。
当我们在层次面板中点击“Main Camera”的时候,在Scene场景视图的右下角就会出现一个小窗口,用来显示“Main Camera”相机下的内容(相当于Game游戏视图内容)。
Scene场景视图是“上帝视角”下的游戏世界,它是由Scene Camera呈现出来的。虽然,我们看不到这个Scene Camera相机,但是我们却可以通过快捷键来操作它。上文中场景视图工具栏中第9个按钮就是用来控制这个Scene Camera的。Scene场景视图主要是让我们开发人员按照“所见所得”的方式来创建游戏世界。因此,我们开发人员就是“造物主上帝”。在Scene场景视图中由一个Main Camera相机,它会采集Scene场景视图中的内容,来呈现到Game游戏视图中。这个Main Camera就是一个游戏对象,我们可以对它进行编辑和控制。Main Camera可以理解为玩家的眼睛。由于游戏世界是同一个,只是两个不同视角相机的呈现而已。因此,两个相机是可以重合的。也就是说,Scene视图和Game视图可以显示完全一样的内容。这种修改分为两种情况,第一是将Game Camera(Main Camera)放到Scene Camera的位置,让Game视图与Scene视图保持一致。另一种就是将Scene Camera放置到Game Camera(Main Camera)的位置,让Scene视图与Game视图保持一致。请注意,两个不同的操作区别在于,一个不动,另一个动,不动的为最终呈现。Unity菜单栏GameObject下有三个操作:Move To View、Align With View和Align View to Selected。它们的操作解释如下。
第一个Move To View:若选中任意一个游戏对象,然后进行Move To View操作,则把这个游戏移到场景视图正中间,很显然游戏对象的位置信息就会发生改变。如果这个游戏对象是Main Camera的话,游戏视图也会跟随发生改变。不经常使用。
第二个Align With View:若选中任意一个游戏对象,然后进行Align With View操作,则把这个游戏对象移到Scene Camera的位置,很显然这个操作没啥意义。但是,当这个游戏对象是Main Camer的话,就会将Main Camer放置到Scene Camera的位置。那么,此时游戏视图呈现的内容就和场景视图一模一样了。少量经常使用(避免修改Main Camer)。
第三个Align View to Selected:若选中任意一个游戏对象,然后进行Align View to Selected操作,则将Scene Camera移动游戏对象的位置,很显然这个操作没啥意义。但是,当这个游戏对象是Main Camer的话,就会将Scene Camera放置到Main Camer的位置。那么此时场景视图呈现的内容就和游戏视图一模一样了。也就是说,我们需要在场景视图中查看游戏视图的呈现效果的话,只需要将Scene Camera放置到Main Camer的位置即可。
接下来,我们介绍Project工程视图,如下所示
我们上文提到,SampleScene是一个场景,该场景会以文件的形式保存到工程的Assets\Scenes目录下,文件的名称就是场景的名称,两者保持一致。因此,你可以在Assets\Scenes目录下,看到一个“SampleScene.unity”的场景文件。这个文件,我们也可以在工程视图(Project)中看到,如下所示
我们可以看到工程视图中包括Favorites,Assets和Packages三个部分。Favorites主要用于搜索,暂时我们不需要它。Assets才是最重要的,它与我们工程保存路径下的Assets目录是一致的。我们创建的所有脚本,材质,模型等等,都放置在Assets目录下。Packages是游戏开发需要的一些资源包,这个对我们帮助很大。这跟我们日常开发应用程序使用的第三方库是一个道理,Unity官方也会给我们提供一些资源包辅助我们进行游戏开发。我们可以通过Window -> Packages Manager 打开资源包管理器对这些资源包统一管理。
最后,我们来介绍检视视图(Inspector)。这个视图不是一个固定的内容,它会根据你点击选择的游戏对象而动态的显示该游戏的所有属性。我们可以在层级视图中选择游戏对象,也可以在场景视图中选择游戏对象。以下是我们选中主摄像机后,检视视图显示的内容
最上面显示了游戏对象的名称,以及标签(Tag)和所属层(Layer)等等。
每一个游戏对象都有属于自己的名称,通过名称我们可以很方便地识别并进行管理。同时每一个游戏对象都有激活状态,游戏对象名称旁边的勾选项。默认情况下,游戏对象都是激活状态,也就是自动勾选的状态。当游戏对象设置为非激活状态后(取消那个勾选项),该游戏对象就会在场景视图和游戏视图中隐藏起来(也就是不可使用)。游戏对象的激活状态可以通过名称左边的复选框来勾选设置,也可以通过C# 脚本来控制。
接下来简单介绍一下标签和图层。在角色扮演游戏中,可以为怪物添加一个敌人的标签(enemy),为主角添加一个玩家的标签(player),但是两者都设置为角色图层(role)。我们使用标签来找到特定范围的游戏对象;而通过图层可以设定属于某个图层的游戏对象是否与其他图层的游戏对象产生碰撞检测,以及该图层的游戏对象是否需要进行渲染等逻辑操作。标签和图形可以理解对游戏对象的分类,标签分类主要用于游戏对象的选择等等,图层分类主要用于碰撞和渲染等等。关于更多的标签和图层的使用,我们会在以后的案例中介绍。
接下来我们简单介绍主摄像机检视面板中的属性,这些属性是可以进行修改。我们可以看到,主摄像机有Transform,Camera,Audio Listener,New Behaviour Script四个属性分类,我们称之为组件。我们看到最下面有一个“Add Component”的按钮,也就是添加其他组件的意思。每个组件都可以理解为不同的功能,给一个游戏对象添加不同的组件,就会使这个游戏对象具备不同的功能。Unity提供了很多组件帮助我们进行游戏开发。其中,Transform代表游戏对象在游戏世界中的位置,Camera就是摄像机,Audio Listener与播放声音有关,而New Behaviour Script是我们上一章节中创建的一个C#脚本。请注意,我们创建的C#脚本文件也属于组件,它必须赋予游戏对象上面才能够运行哦。组件是Unity开发必须掌握的重要知识。我们除了要掌握官方提供的组件之外,还要能够编写自己的C#脚本组件。