爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)

基础知识
经过多年的发展,Unity编辑器已经越来越完善,使用起来也相当方便、快捷。Unity秉承“所见即所得”的开发原理,将编辑器与游戏引擎融合在了一起。传统游戏引擎几乎没有任何游戏界面,它们提供给开发者的往往都是赤裸裸的源代码,以至于想实现任何功能,都需要编写代码才可以完成。而Unity的理念是为开发者节省时间,让他们爱上Unity并成为它的粉丝。它以可视化方式提供大部分开发工作,开发者无须编写任何代码,只需在界面中执行一些赋值操作就可以了。

2.1 游戏项目

Unity游戏项目有若干游戏场景组件,游戏场景由若干游戏对象组成,游戏对象又由若干游戏资源组成。比如,在Hierarchy视图窗口中可以创建所有游戏对象,在Project视图中可以管理所有游戏资源,在游戏界面场景中可以实现游戏的所有业务逻辑等。游戏工程需要在Unity编辑器中打开,可视化的编辑器界面无疑让开发者使用起来更加有条理,使开发者可以更清晰地看到整个游戏工程的层次与概念。使用Unity,我们可以快速敏捷地制作3D游戏。

2.1.1 创建项目

打开Unity,点击右上角的New按钮即可创建游戏项目,如图所示。根据游戏类型,可以选择3D或2D,它将影响后面SceneView视图的样式。Add AssetPackage按钮可以给即将创建的工程添加预制游戏包。如果需要启动Unity分析器,请打开Enable Unity Analytics(该选项建议打开)。接着输入正确的Projectname(项目名称)和Location(项目路径),确认无误后点击Create project(创建项目)按钮,Unity就会自动打开这个项目了。爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第1张图片

2.1.2 打开项目

打开Unity后,如上图所示,点击右上角的Open按钮即可打开一个已有的Unity项目。如果打开项目时需要打开指定的场景,则在Assets文件夹中选择一个Unity场景,双击场景即可,如下图所示。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第2张图片

2.1.3 版本管理

项目一般需要SVN或者Git一类的工具来进行版本管理。但是,打开Unity项目后会生成一些中间文件,这些不需要进行版本管理。如图上图所示,只需要把Assets目录以及ProjectSettings目录上传SVN或者Git即可。打开项目后,Unity会自动生成3个文件夹,如图下图所示。其中,Library文件夹就是根据Assets目录下的游戏资源所生成的中间文件,Temp文件夹是Library生成过程中产生的临时文件。这两个目录一定不要上传到版本管理中。另外,UnityPackageManager保存的是所要用到的package,也需要上传到SVN中。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第3张图片

2.1.4 安装多个版本的Unity

有时候,想试试新版本的Unity,但是又不想删除老版本,所以多个版本共存很有必要。然而Unity在安装的时候并不能选择目录,如果安装了新版本,就会自动把老版本覆盖。这里有一个小技巧,那就是可以把老版本的文件夹改个名字,比如Unity2017,然后再安装新版本,如图下图所示。如此一来,就可以多版本共存了。爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第4张图片
可能Unity也意识到项目中多版本共存的需求,所以在新版本中提供了Unity Hub的工具,可以专门处理多版本问题,不过目前还只是Preview(预览版)。

2.2 Project视图

新项目创建完毕后,Unity的5大经典视图就映入眼帘了,如图下图所示。接着,我们会详细介绍每个视图的功能以及工作方法。首先是Project视图,它是游戏资源的集合视图。换句话说,游戏内所能用到的资源,无论大小,都放在这里。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第5张图片

2.2.1 创建资源

Project视图又称资源视图,这里面放的都是引擎所用到的游戏资源。资源又分两部分,第一部分为外部资源,例如图片资源、模型资源、动画资源、视频和声音资源。这些资源的特点就是,它们并非使用Unity引擎创建的,而是由外部工具做的模型以及贴图,或者业内达成共识的通用格式资源。第二部分就是内部资源了。顾名思义,就是必须使用Unity引擎创建,并且这部分资源只有放在Unity中才能识别。如图下图所示,在Project视图中点击Create按钮,会弹出创建资源面板,这里面列出了脚本、Shader、场景、预制、材质、精灵、动画控制器、角色遮罩、时间线、物理材质,等等(这些资源在游戏中都起到了非常重要的作用)
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第6张图片

2.2.2 搜索资源

成型的游戏项目资源是海量的,开发者可能会通过多文件夹或者命名规则来规划它们。但是,如果数以万计的游戏资源都出现在Project视图中,快速搜索资源无疑是一个很必要的功能。在Create按钮右边的搜索栏中,可以通过字符串的方式模糊搜索资源,但是资源多了,很多不同类型的资源或者放在不同目录下的资源的重名概率就很大,这样搜索非常不便。因此,最佳的搜索应该可以指定文件夹以及资源类型,这样会更精准。如图下图所示,点击搜索栏右侧的第一个按钮,在弹出框中可以指定搜索类型。比如,我们选择Scene,此时搜索栏中会自动出现“t:Scene”字样,表示在Project视图所有文件夹下搜索场景资源。如下图所示,在搜索栏中再添加一个需要搜索的字符“a”,即“a t:Scene”,这就表示在所有场景中搜索名字中包含“a”的场景了。聪明的朋友此时应该能联想到,如果想搜索其他类型的资源,也可以自行在输入框中输入“标识 t:类型”了。爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第7张图片

爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第8张图片
如果想进一步指定搜索的文件夹,点击Search下拉框,从中选择需要搜索的文件夹即可,如下图所示。然后直接在搜索框中输入“par t:Prefab”就表示搜索NewFolder文件夹下,名字包含“par”字符串的所有Prefab类型的游戏资源。怎么样,Unity的搜索功能很炫酷吧!

2.2.3 搜索标签

此外,Unity编辑器还提供了搜索标签的功能。我们可以给特殊资源添加标签,这样即使它们的资源类型不同,也可以通过搜索标签的方式快速搜索出来。如下图所示,在Project中选择一个游戏资源,在右侧Inspector面板中的右下角点击添加标签按钮,然后就可以在弹出面板中添加一个或者多个特殊的搜索标签了。这里我们暂时给Particle System添加了“Effect”和“Ground”这两个标签。如果希望自定义一些别的标签,则可以在标签菜单栏上面的搜索栏中输入一个全新的自定义字符串标签,然后点击回车即可。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第9张图片
要想搜索标签,可以按照下图所示,点击Project视图上面搜索栏右侧的第二个按钮,然后从弹出的标签菜单中选择需要搜索的标签,或者直接在搜索栏中输入“par l:Effect”即可。我相信聪明的读者此时定能明白,“par”表示资源名必须包含的字符串,“l:Effect”表示满足搜索的标签名为Effect。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第10张图片

2.3 Hierarchy视图

Project视图中的游戏资源,如果需要出现在正式游戏中,那么就需要Hierarchy视图(层次视图)了。并不是所有资源都可以直接拖入Hierarchy视图中,通常只有游戏对象才能放进,比如Prefab资源(第11章会详细介绍这个特殊的资源)。游戏对象本身是一个很小的东西,它负责引用外部资源,比如模型、贴图和声音等,其原理其实就是通过程序来控制需要的游戏对象。

2.3.1 创建游戏对象

游戏对象分为两种,第一种是预先编辑的,第二种是运行时代码动态生成的。这里我们先讲预先编辑的游戏对象。如下图所示,在Hierarchy视图中点击Create按钮,从弹出的快捷菜单中选择需要创建的游戏对象,例如3D游戏对象、2D游戏对象、特效、光、音频、视频、UI、摄像机等。Unity的游戏对象其实就是在一个空的GameObject上挂了对应属性的脚本。拿摄像机来说吧,就是在游戏对象上挂了个Camera组件(又称脚本),如果删除掉这个脚本,就和普通的游戏对象没有区别了。有些复杂的游戏对象甚至需要挂很多组件才行。由此可见,它非常灵活、方便。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第11张图片

2.3.2 搜索游戏对象

在Hierarchy视图中,可以同时编辑多场景,而游戏对象隶属于某个场景中。如下图所示,Create按钮的右侧有个搜索栏,它和Project搜索栏不一样的是,Hierarchy视图的搜索功能比较简单,只提供了按名称搜索,或者按类型搜索。按名称搜索就是模糊搜索匹配,按类型搜索可以搜索到某个游戏对象身上挂的组件。Hierarchy视图的搜索功能没有Project全面,其原因就是它并不需要复杂的搜索规则。因为Hierarchy视图中同时出现的游戏对象并没有那么多。从开发的角度讲,游戏要尽可能地剔除不需要的游戏对象,避免内存和渲染白白浪费,所以大部分情况下,搜索名称就可以很快定位了。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第12张图片

2.4 Inspector视图

Inspector视图承载着所有游戏对象以及游戏资源组件参数的编辑工作。在Project视图或者Hierarchy视图中任意选择一个游戏对象或者游戏资源,右侧的Inspector面板都会列出它的详细属性。选择不同的对象,面板呈现的内容也不同,其原理就是键入一些数据并将其序列化在这个对象身上。如果是在Hierarchy中选择的对象,数据就会保存在这个对象所在的场景上。如果是在Project视图中选择的资源,数据就会保存在这个资源本身上。

2.4.1 标题栏

大部分对象都有标题栏,Inspector面板也有,在最上方,如下图所示。上下共分两行,下面按照从左到右、从上到下的次序介绍。立方体下拉按钮:用于给游戏对象选择一个特殊的标志,可以在Scene视图中快速定位到它。第一个勾选框:设置激活状态。如果未勾选,则此游戏对象不会显示在Scene和Game视图中。输入框:设置游戏对象的名称,可以起任意的字符串名。第二个勾选框:设置对象是否为静态属性。静态属性包括烘焙、遮挡剔除、寻路、剔除等。如果勾选,则启动(第9章会详细介绍相关的内容)。Tag:给游戏对象设置一个特殊表示,可用于代码中动态获取,或者根据tag来判断逻辑。Layer:表示给游戏对象设置一个层。用于设置摄像机是否显示某个层,或者点击事件不可响应在某个层上。以上内容其实都比较重要,后面会详细介绍它们
在这里插入图片描述

2.4.2 组件栏

大部分对象都有标题栏,Inspector面板也有,在最上方,如下图所示。上下共分两行,下面按照从左到右、从上到下的次序介绍。立方体下拉按钮:用于给游戏对象选择一个特殊的标志,可以在Scene视图中快速定位到它。第一个勾选框:设置激活状态。如果未勾选,则此游戏对象不会显示在Scene和Game视图中。输入框:设置游戏对象的名称,可以起任意的字符串名。第二个勾选框:设置对象是否为静态属性。静态属性包括烘焙、遮挡剔除、寻路、剔除等。如果勾选,则启动(第9章会详细介绍相关的内容)。Tag:给游戏对象设置一个特殊表示,可用于代码中动态获取,或者根据tag来判断逻辑。Layer:表示给游戏对象设置一个层。用于设置摄像机是否显示某个层,或者点击事件不可响应在某个层上。以上内容其实都比较重要,后面会详细介绍它们
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第13张图片
每个组件上都有一些参数可以选择或者设置。拿Transform组件来说,所有游戏对象都有这个组件,并且无法删除。它用来记录游戏对象在3D世界中的坐标、旋转和缩放信息。在Camera组件上,也可以设置颜色、裁切、视口大小等。因为目前选择的这个游戏对象是在场景中的,所以修改后的属性也会记录在场景上。如果我们把这个Camera拖入Project视图让它变成Prefab,那么这组信息就会记录在Prefab自身上,而与场景无关了。总之,组件也好,脚本也罢,每个Inspector面板所显示的信息是完全不一样的,我们需要做的就是理解组件的含义,这样才能更好地控制它。另外,组件与组件的配合也是一门学问,比如摄像机的后处理效果,它必须依赖摄像机才能发挥作用。这样的例子还有很多,后面会慢慢介绍给大家的。

2.5 Scene视图

Scene视图就是游戏最终画面的自由视角。在游戏开发过程中,首先需要在Scene视图中合理地摆放游戏对象,然后配合摄像机将最终画面输出给玩家。例如,游戏中一个主角在挥舞着自己的武器砍怪,我们可以通过Scene视图绕到他的身后,看看游戏画面看不到的位置。可见,Scene视图默默承担着所有的幕后工作。

2.5.1 导航栏

Scene视图的最上面是一组导航栏,如下图所示,左上的这6个按钮是操作栏按钮,分别是拖动、坐标、旋转、缩放、区域(常用UI区域)、整体(同时操作坐标、旋转和缩放),它们对应的快捷键分别是Q、W、E、R、T和Y。在Hierarchy视图中任意选择一个游戏对象就可以操作了,读者可以自行在电脑上操作一下,很简单。
在这里插入图片描述

在操作栏按钮的右边,第一组按钮用于设置游戏对象的操作原点。如图2-17和图2-18所示,两个Cube嵌套在了一起。Pivot表示父对象的操作原点就是自身的坐标点,而Center则表示父对象的操作原点是所有子对象共同的中心点。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第14张图片
在坐标点设置按钮的右边还有一组按钮,用于设置旋转的方向,如下图所示。Global表示忽略游戏对象自身的旋转,Local表示使用游戏对象自身的旋转角度。例如,在编辑模式下移动摄像机对象。由于摄像机自身是有旋转角度的,如果希望顺着它的角度来移动,需要设置成Local。如果希望以水平方向来移动,需要设置成Global。爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第15张图片
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第16张图片

2.5.2 标题栏

导航栏的下面是一组标题栏,如图2-21所示,Scene视图的幕后工作离不开它。下面从左到右依次来介绍一下。Shaded:控制Scene视图中的显示,例如GI、模型网格、渲染、shadow以及Overdraw(若要优化渲染效率,降低Overdraw就很重要了)。2D:设置Scene视图是2D模式还是3D模式。如果是2D游戏,没有Z轴的概念,所以用不到旋转,这样查看会更方便一些。太阳图标:是否需要光源。如果你发现Scene视图很暗,那么打开它即可(推荐打开)。声音图标:如果Hierarchy中此时有音频(Audio)对象,非运行模式下点击这个按钮可以听到音频。图片图标:设置与游戏视图相同的渲染信息,例如天空盒子、雾和动画等。这会带来一定开销(通常不建议打开)。Gizmos:Scene视图启动或隐藏一些图标,例如摄像机图标。Unity的脚本提供了强大的Gizmos功能,可以自定义Gizmos(通过代码绘制)。搜索框:根据名称模糊搜索游戏对象。
在这里插入图片描述

2.5.3 坐标系控制器

在Scene视图的右上角,是坐标系控制器。如下图所示,点击x、y、z三个方向的标志后,会切换Scene视图的摄像机朝向;下面的ISO用来切换摄像机正交与透视;右上角有个小锁头,点击后即可锁定,此时坐标系控制器将无法操作。爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第17张图片

2.5.4 视图预览

Hierarchy视图以列表的形式列出所有的游戏对象,通过父子对象的关系来管理它们,而Scene视图展示了每个游戏对象的具体坐标、选择和缩放等,所以它们的关系是非常紧密的。如下图所示,在Hierarchy视图中选择任意游戏对象,即可在Scene视图中出现。结合2.5.1节介绍的视图导航栏操作按钮,可以编辑它们的位置。所见即所得,Unity确实很强大啊!
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第18张图片

2.6 Game视图

Game视图是游戏最终展示给玩家的一面,就是把游戏的主摄像机看到的内容显示到了这里。成品的游戏可能会有多个摄像机,比如场景摄像机和UI摄像机等,我们可以通过设置摄像机渲染的深度来决定渲染的先后顺序。我们先来看看Game视图的组成结构。

2.6.1 标题栏

和Scene视图一样,Game视图也有标题栏,如下图所示。它的主要功能就是控制Game视图的显示,这里的设置并不能影响最终发布游戏的结果,但是可以让开发更方便一些。下面从左到右依次介绍一下。Display 1:摄像机可以设置当前的Display层,这里可以切换Game视图显示的是哪个Display层(这个属性在移动平台不支持)。Free Aspect:设置分辨率,这个属性很重要。一般游戏都要做自适应屏幕,可以在这里设置目标分辨率,从而验证自适应是否正确。Scale:用于整体调节Game视图的大小。放大后,可以更清楚地看到开发者关注的某一部分。Maximize On Play:全屏运行游戏。Mute Audio:是否关闭声音,这个属性很重要。游戏开发到后面,声音都已经植入了,但是程序员关注的可能并不是声音,可是戴上耳机总播放游戏背景音乐,那就太不方便了,所以适当的时候就关掉音频吧。Stats:当前游戏的性能面板。Gizmos:让Scene中的Gizmos都显示在Game视图中,打开后会影响性能(建议不要打开)。
在这里插入图片描述

2.6.2 视图预览

如下图所示,游戏画面就出来了,打包发布到终端几乎就是这个效果了。为什么是几乎,其实还是会有一些差别的,比如分辨率自适应、优化、性能,等等。后面我们会慢慢向大家介绍。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第19张图片

2.7 导航栏视图

导航栏视图在Unity编辑器的最上方,主要是所有视图通用的一些功能以及设置信息。正上方的是Unity播放器,如下图所示,这三个按钮分别表示运行游戏、暂停游戏、逐帧播放游戏。爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第20张图片
在调试游戏的时候,通常会用到暂停键,这里提供两个播放器的技巧。点击暂停键以后再点击运行游戏按钮,游戏就会被暂停到第一帧。有时候,调试时来不及点击鼠标暂停键,可以利用Command+Shift+P组合键暂停/恢复游戏。在播放器右侧,有一组工具栏,如下图所示。Collab:可以用Unity自己提供的云服务来管理版本,包括它的云构建和云打包功能。缺点就是需要把整个工程都上传到Unity的服务器上,使用云构建查错的话,没有本地直观。云朵图标:登录Unity云服务,例如AD广告、闪退日志收集、性能分析等(有兴趣的朋友可以自行查阅)。Account:Unity账号登录管理系统。在这里插入图片描述
Layers:可以编辑层。如下图所示,菜单中每个层的右侧有个“小眼睛”按钮,它表示是否在Scene和View视图中显示属于这个层的游戏对象。如果你发现在Game视图中能看到某个游戏对象,但是在Scene视图中却看不到,多半就是这里给关闭了。Edit Layers 用于添加或删除新的层。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第21张图片
Layout:表示Unity编辑器的布局。如下图所示,默认提供了5种布局供开发者选择,下面还提供了保存和删除布局的功能。通常,Unity默认提供的布局已经够用。但是Unity拓展编辑器的功能非常强大,如果在日后的开发中自己拓展了一些自定义窗口,就需要用到这个了。这可以保证每次打开Unity,都是自定义的布局。爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第22张图片

2.8 其他功能

Unity编辑器中还隐藏了一些容易忽略但是很有用处的小功能,这里将它们列出来,方便大家在日后的工作中使用。

2.8.1 小锁头

在Unity中,几乎每个系统窗口的右上角都有一个“小锁头”,不同窗口中它们的含义可能会有所不同。如下图所示,Inspector面板的小锁头就是把这个面板彻底锁定起来。如果此时再选择别的GameObject,这个面板的内容并不会切换,还是保留之前锁定的信息。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第23张图片

2.8.2 窗口菜单

在Unity每个系统窗口或者自定义窗口的右上角,都有一个菜单窗口,如下图所示,下面介绍各个菜单的含义。Normal:表示正常面板。Debug:组件的私有属性默认是不显示在面板上,勾选该项后,所有私有属性将显示在面板中。Lock:“小锁头”的功能。Maximize:最大化窗口。Close Tab:关闭窗口。Add Tab:添加一个新窗口,这个技巧非常有用,有时需要两个面板的信息,此时可以通过Add Tab添加多个面板。配合“小锁头”的功能,对比面板中的属性会更加方便。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第24张图片

2.8.3 保存组件参数

Unity 2018提供了保存属性的功能,每个组件都可以保存。如下图所示,任意组件的右上方都有一个保存或选取的按钮,可以将参数保存到文件中,或者从文件中选取来设置新组件的参数。
爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第25张图片

2.8.4 Package Manager

Unity内置了很多好用的开发插件,但是有些插件并不是所有项目都需要的。因此,它提供了Package Manager选择窗口(如下图所示),开发者可以自行安装自己需要的插件。它和Asset Store的区别就是,插件的代码以及资源并没有放在Assets目录下,这样就更像内置的功能了。爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)_第26张图片
2.9 小结
本章中,我们介绍了Unity编辑器常用的5大布局,简要说明了布局之间的相互工作方法,以及Unity编辑器的一些小技巧。Project视图:保存游戏资源。Hierarchy视图:处理游戏对象的层级。Inspector视图:游戏对象的详细信息展示。Scene视图:编辑模式视图。Game视图:游戏最终发布视图。

制作不易,不喜勿喷,谢谢。
正在学习Unity的小伙伴或者正在了解的小伙伴可以一键三连支持一下,你们的鼓励是我前进的动力
ps:其中引用的素材或者话语,侵联删

你可能感兴趣的:(Unity学习,游戏,unity)