1.2 熟悉Unity编辑器
下载好Unity编辑器后,你就可以开始探索了,其可视化组件让你能以“所见即所得”的方式制作出游戏。由于主要的交互对象都是该编辑器,所以很多人就把它称为一个简单的Unity(集合)。本节将介绍Unity编辑器的各种元素,以及我们是如何利用它们之间的协作来完成一款游戏的制作的。
1.2.1 项目部分
Unity Hub不仅能管理编辑器的安装,还可以创建或选择项目,目前,你的Unity Hub中的项目界面应该是空白的(见图1.4)。
图1.4 空白的项目界面
只用单击“新项目”按钮就能快速新建一个项目。如果你安装了多个版本的编辑器,你可以在新建项目界面的顶端看到编辑器版本选项,单击编辑器版本旁边的下拉按钮来选择你想要的版本。如果你想打开已有的项目(不在当前列表中),可以单击“打开”按钮来进行操作。接下来的练习中,你将学到新建项目的具体步骤。
创建自己的第一个项目
你已经可以新建一个项目了,注意项目存储的位置,确保之后能顺利地找到它。图1.5所示是新建项目时会出现的窗口,新建项目的步骤如下。
1.打开Unity Hub并单击“新项目”按钮,新项目窗口将弹出。
2.选择一个存储位置。建议新建一个叫UnityProjects(Unity项目)的文件夹来保存本书的所有项目,如果你不确定存在哪儿,可以使用默认路径。
3.将你的项目命名为Hour 1 TIY(表示第1章练习)。Unity会建一个相同名称的文件夹以保存该项目,路径与窗口中所示的一致。
4.选择3D选项。之后你将学到其他选项的内容。
5.单击“创建项目”按钮。
图1.5 第一个项目的设置
小记 2D、3D、渲染管线
你一定好奇其他的选项是什么。你可以通过2D和3D选项选择你所要做的游戏类型,不用担心选错或还不确定,这些选项只是决定了编辑器的一些设定,之后随时可以更改。HDRP(High Definition Render Pipeline,高清渲染管线)和URP(Universal Render Pipeline,通用渲染管线)都是Unity 可编程渲染管线(Scriptable Rendering Pipeline)中的一种,它们使开发者可以自己控制项目的渲染效果,但其中涉及的知识超出了本书的范围,感兴趣的读者可自行参考相关资料。
1.2.2 Unity界面
现在,你已经安装好Unity,打开了新项目,是时候探索一下Unity界面了。当你第一次打开一个项目时,你会看到一堆灰色的面板(被称为视图),而且里面都是空的。不用担心,马上就能让这里“热闹”起来,本章接下来的部分会单独介绍每一个视图。现在,我们先来看看整个界面(见图1.6)。
对新手来说,可以自己定义整个界面的样式,任何视图都可以移动、拼接、复制或改变。举例来说,如果你单击“层级”这个词来选中层级视图(左边),把它拖动到“检查器”(右边)上面,就可以把这两个视图拼在一起;你还可以把鼠标指针放在任意视图间的分割线上,拖动该线就可以改变视图的大小。不如现在就上手试试,把界面布置成你喜欢的样子吧!如果你不是很满意最后的样子,选择“窗口”→“布局”→“默认”就可以轻松地切换回默认布局,现在不妨多试几种预置的布局吧(我尤其喜欢宽布局)。如果你调整出了自己喜欢的样式,可以选择“窗口”→“布局”→“保存布局”将其保存下来(本书中我使用的是一个叫Pearson的自定义布局),存好后,即使你不小心改动了当前布局,也能随时恢复。在Unity编辑器右上角有个下拉列表,即图1.6中显示“布局”那里,在那里也可以更改布局。
图1.6 Unity界面
小记 找到合适的布局
不会有两个完全相同的人,也不会有两个相同的理想布局,一个好的布局可以帮助你更简便地完成项目,而且之后使用Unity的时间会很多,所以花一些时间调整出适合自己的布局,总是值得的。
添加一个视图也很简单,你可以右键单击任意视图标签(如图1.7中的“检查器”),将鼠标指针悬停于“添加选项卡”上,会弹出一个列表供你选择(见图1.7)。你应该会疑惑为什么需要添加一个视图。比如你在移动视图时不小心关掉了一个视图,用上述操作把它加回来就可以了;或者是需要多个场景视图,在不同视图中锁定不同元素,或固定在一根轴的视角上。如果你真想看看多个场景视图,可以选择“窗口”→“布局”→“4分割”切换到该模式(查看4分割模式之前记得保存你的自定义模式)。
图1.7 添加选项卡
1.2.3 项目视图
任何为项目服务的东西(文件、代码、纹理、模型等)都能在项目视图中找到(见图1.8),这个视图放置了本项目所有的资源。新建项目时,会有一个叫Assets(包含项目内的资源)的文件夹,如果你通过磁盘路径查看的话,也能看到这个文件夹,这是因为Unity将项目视图中的内容同步至了本地磁盘,当你在Unity中新建一个文件或文件夹时,资源管理器中也将同步显示(在资源管理器新建文件夹后,在Unity项目视图中也会同步显示)。在项目视图中,简单的拖动就能移动这些文件,Unity让整个文件管理的过程变得轻松很多。
图1.8 项目视图
小记 资源和对象
在Assets文件夹中的每一个文件都是一个资源,包括纹理、网格、声音、代码等;而游戏对象是指一个场景或某一个关卡中的物体,你可以用游戏对象新建资源,也可以用资源新建游戏对象。
小记 资源包
查看项目文件夹时,你可以在磁盘和Unity的项目视图中看到Assets文件夹,但Packages(包含项目内的资源包)文件夹只显示在Unity的项目视图中,在这里你可以查看已添加到本项目的资源包,你可以把一个资源包看作一个可以改变项目功能的附加软件或模块。Unity已经有很多成熟好用的资源包,你也可以制作自己的,到后期,你将学到更多关于资源包的内容。
注意 资源移动
Unity保留了各资源间的关系属性,也就是说,在外部删除资源时可能会引起一些问题,所以一般来说,最好在Unity中进行资源管理。
单击项目视图中的一个文件夹时,其中包含的内容将在右侧的Assets视窗中显示,如图1.8所示,其中包含一个叫Scenes(包含项目内的场景文件)的文件夹,打开Scenes文件夹,你就能在右侧看到其中包含的唯一文件——一个场景。要新建资源的话,可以打开Create(创建)下拉列表(在“+”旁边),新建的资源任何项目可用。
提示 项目管理
项目资源整理是项目管理中很重要的一环,项目越大资源越多,找特定的资源越困难。遵循下面这些通用的整理规则可以避免一些不必要的麻烦。
1.每种类型的资源应该有单独的文件夹(场景、脚本、纹理等)。
2.每个资源都应该在一个文件夹中。
3.如果有嵌套的文件夹,要确保其逻辑准确,其中的文件夹应该是细分的,而不是模糊的。
遵循这几条规则真的会让项目管理大有不同。
单击Favorites(包含已有的搜索标签)选项可以快速浏览指定文件类型的所有资源,这样就可以快速查看你的各种资源。单击Favorites下的某个选项[如All Models(所有模型)]或在内置的搜索栏中进行搜索,就可以将搜索结果缩小至特定资源或资源包中(或在两者中,见图1.9),只用小小练习一下,就能迅速找到你想要的文件了。
图1.9 项目视图中的搜索
1.2.4 层级视图
一般来说,层级视图看起来和项目视图很相似(见图1.10),但层级视图中只会显示当前场景所包含的分项,而不是整个项目的所有分项。在Unity中新建项目的话,它会包含一个默认场景,其中只有Main Camera(主摄影机)和Directional Light(定向光)两个游戏对象,添加的其他对象也会在层级视图中显示。和项目视图一样,通过Create下拉列表可以在场景中快速添加其他游戏对象,也可以通过内置的搜索栏进行搜索,拖动就可以移动、管理、嵌套收纳各对象。
图1.10 层级视图
提示 嵌套
嵌套是一种多对象间的管理关系模式,在层级视图中,将一个对象拖动至另一个对象上,被拖动的对象将会嵌套至目标对象下,这就是常说的父子关系。对应来说,最上层的对象就是父对象,其所包含的对象就是子对象。被归为子对象时,该对象会缩进显示,所以很好分辨。在之后的学习中,你会看到嵌套对这些对象的实际影响。
提示 场景
Unity用场景来描述常规概念中的关卡或地图。在Unity项目的开发过程中,不同的对象及其行为表现应该属于不同的场景,比如说,你的游戏需要开发一个有雪的关卡和一个丛林关卡,那它们就是分开的两个场景。在网上的一些问答中,场景和关卡两个词时常是被混用的。
1.2.5 检查器视图
检查器视图中会显示目前选中对象的所有属性,在项目视图或层级视图中选中任意资源或对象,检查器视图会自动显示其信息。
图1.11中显示的是Main Camera被选中后的检查器视图中的内容。
图1.11 检查器视图
下面来看看检查器视图有哪些功能。
1.单击取消勾选该对象名称旁边的复选框会让该对象不可用,且不会在场景中显示,默认情况下该对象是可用的(复选框被勾选)。
2.下拉列表的内容对应了一些预置选项(比如“图层”和“标签”下拉列表,这些在之后会讲解)。
3.对文本框、下拉列表及滑动条都可以进行对应修改,即使游戏正在运行,这些修改也会自动同步到场景中。
4.单击“添加组件”按钮可以添加组件。
注意 游戏运行时修改数值
十分强大的实时数值修改功能让你可以在运行游戏时动态查看对应结果,不需要反复结束又开始游戏就可以调整场景物体的移动速度、跳跃高度或是飞行中的碰撞力。需要注意的是,运行时修改的数据在结束时会自动归位,如果你已经获得了理想的数值,请记下来,并在结束运行后再次进行修改。
1.2.6 场景视图
在Unity中,场景视图是非常重要的一个视图,你可以实时看到你所搭建的游戏的样式(见图1.12),通过鼠标和一些快捷键,你就可以在场景中漫游查看,并且把游戏对象放到你设想的地方,因此场景视图算是一个沉浸式的控制界面。
图1.12 场景视图
之后你将学会如何在场景中移动浏览,但现在你需要看看场景视图中包含的一些控制元件。
1.绘制模式:控制当前场景的绘制模式,默认状态为着色模式,场景中的所有物体都按照其纹理绘制出来。
2.2D/3D视图:控制2D或3D视图的显示,在2D视图中,场景小工具(本章后面会介绍)将不可见。
3.场景光照:控制场景中的物体是同时接受默认的环境光,还是只接受场景中实际存在的光源,默认情况下接受默认的环境光。
4.声音模式:控制声音资源是否在场景视图中显示。
5.视觉效果:控制类似天空盒、雾或其他特效是否显示在场景视图中。
6.隐藏对象:控制被隐藏对象是否在场景视图中显示。
7.场景网格:控制是否显示场景网格。
8.工具:控制组件编辑器工具面板是否显示。
9.Gizmos(小工具)下拉列表:控制场景视图中显示哪些元素的线框,有助于以视觉的方式排除一些问题;它同时还控制放置网格的显示与否。
10.场景小工具:控制当前所视方向,还可以使场景视图对齐某一特定轴向。
小记 场景小工具
场景小工具是场景视图中非常强大的一个控制器,如图1.12所示,该控制器有对应x、y、z这3个轴向的坐标轴,这样就可以快速得知当前的视觉朝向。在第2章“游戏对象”中你会学到更多关于轴向和3D空间的知识。通过场景小工具,还可以将视图角度迅速调整至固定轴向,单击既定轴向,当前视图就会立即调整至对应轴向,比如顶视图或左视图。
单击场景小工具中间的正方体,当前视图将在Iso(等距)和Persp(透视)模式中切换。等距是指没有透视的3D视图效果;透视指带有透视的3D视图效果。试试切换两种模式,看场景视图有什么改变,你会发现场景小工具下的图标从等距模式的平行线变成了透视模式的鱼尾纹样式。
1.2.7 游戏视图
最后来看看游戏视图。本质上来说,游戏视图可以完整还原当前场景,让我们在编辑器中也能“玩”上游戏,该视图中所有游戏元素或功能的表现就是项目生成后会有的表现。图1.13所示的就是游戏视图的样子,虽然“播放”“暂停”“下一帧”按钮在技术层面不属于本视图,但它们可以控制游戏视图,所以被包含在内。
提示 游戏视图丢失
如果你发现游戏视图被隐藏在场景视图后面,甚至完全找不到游戏视图,单击“播放”按钮,游戏视图就会自动出现并开始运行游戏。
图1.13 游戏视图
游戏视图的控制元件能辅助进行游戏测试。
1.播放:控制当前场景的开始,单击“播放”按钮后,所有的控制器、动画、声音、特效都将开始运行。游戏在此处的运行效果应该与它被导出后在其他平台(例如计算机或手机)上的效果一致。再次单击“播放”按钮,就能停止游戏。
2.暂停:控制当前运行游戏的暂停,一旦单击“暂停”按钮,游戏中所有元素都将保持在当前状态;再次单击“暂停”按钮,游戏将继续运行。
3.下一帧:当游戏暂停时,控制游戏运行下一帧,这样可以让游戏逐帧完成,找到可能存在的问题。在游戏运行中单击该按钮会使游戏暂停。
4.纵横比下拉列表:控制游戏视图运行时的纵横比,默认设置为Free Aspect(自由比例)模式,你可以根据目标平台来调整这里的纵横比。
5.播放时最大化:决定游戏视图在运行时是否最大化至编辑器大小,默认为未选择状态,运行时游戏视图就是其原本的尺寸。
6.音频静音:使运行过程保持静音。当你旁边的人对你反复的测试行为感到不满时,这个功能还挺方便的。
7.状态:控制游戏运行时渲染统计信息是否显示,有助于评估一个场景的渲染效率。默认设置为关闭状态。
8.Gizmos下拉列表:通过下拉列表(右侧的小箭头)中的选项控制运行过程中小工具显示与否。游戏视图中小工具默认不显示。
提示 运行、暂停、关闭
最开始是挺难理解运行、暂停、关闭状态的。当这个游戏还没有在游戏视图中被执行时,就是处在关闭状态,此时游戏的各个控制器是没有运作的,游戏也无法交互。单击“播放”按钮后,游戏开始执行,我们会说游戏在运行了。播放、执行、运行,指的是同一件事。游戏开始后单击“暂停”按钮,游戏将暂停并保持在当前状态,此时,游戏处在暂停状态。暂停和关闭状态的区别在于,暂停后再开始的话,游戏会从暂停处继续运行,而关闭后再开始,游戏将从头开始。
1.2.8 值得一提:工具栏
尽管不是单独的一个视图,Unity的工具栏在整个编辑器中的地位还是举足轻重的,图1.14显示了其中包含的组件。
图1.14 工具栏
1.变换工具:用这些工具可以控制各个游戏对象,之后的章节中会讲解。其中的手形按钮需要注意一下,这是本章后面会讲到的手形工具。
2.小工具变换选框:调整场景视图中的场景小工具显示状态,现在暂时不用了解。
3.游戏视图控件:控制游戏视图状态。
4.账号及服务:管理当前使用的账号及服务。
5.“图层”下拉列表:控制场景视图中显示哪些图层,默认为所有图层都显示,现在暂时不用了解,之后第5章“灯光和摄像机”中会讲解。
6.“布局”下拉列表:快速改变当前布局。