Godot从入门到精通基础篇 第三章 创建并导出第一个场景
本章中我们会创建首个场景,然后对基础形状比如箱体进行添加、合并及应用纹理。本章讲解如何使用基础变换以及应用于对象。还会讲解如何管理及分组对象。
学完本章,读者可以:
- 创建场景
- 添加基础对象
- 为对象创建、应用颜色和纹理
- 分组形状
- 使用快捷方式搜索指定的对象或资源
- 导出首个场景
新建项目及场景
上一章中已经讲解了用户界面中的主要功能,下面就来创建一个可进行导航的简单场景并在其中添加一些具有纹理和颜色的对象。学完这一节后,读者可以:
- 向场景添加基础对象
- 为对象应用基础纹理和颜色
- 变换对象(如移动、缩放和旋转对象)
- 在场景中添加人物控制器,让其可以在平面上行走
- 添加及配置光照
- 分组对象及一次对多个对象应用属性
在场景中添加及合并简单内置对象
稍后我们会看到,可以使用一组基础形状(如圆柱、球形和箱形)、光照(如平行光或点光)、相机和其它内置资源(如人物控制器)创建游戏环境。一旦在当前场景中添加了这些对象后,就可以通过Godot修改它们的属性了。
首先配置场景来创建3D内容。
- 在场景树标签中,应该看到一条要求创建根节点的消息。
- 点击3D Scene就会创建一个3D场景。
在选择该选项后,场景树中应该会显示一个名为Spatial的节点。该节点就是场景中其余节点的基础。
接下来创建一个用作地面的立方体。
- 右击名为Spatial的节点。
- 在上下文菜单中,请选择Add Child Node项。
- 在新窗口中的搜索框中输入单词box。
- (通过双击)选取名为CSGBox的节点类型。
- 这默认会在(0,0,0)处创建一个大小为2的箱体。也就是说该对象的长宽高均为2。
- 请将该立方体重命名为myCube,重命名的方法有(1)在场景树中选中然后同时按下CTRL+ENTER,或(2)在场景树中选中然后双击它,或(3)在场景树窗口中右击该对象并在上下文菜单中选择Rename选项。
重命名好立方体后,可以修改一些属性来查看外观的变化。例如:
- 在检查器窗口中,找到名为Transform属性,将缩放(Scale)属性的x,y和z修改为2,查看立方体的大小。
注意可以使用检查器窗口顶部的搜索框来查找具体的属性。
- 修改其y旋转属性为45度(即围绕y轴的旋转度数),查看旋转的变化。注意对于这些参数,可以使用检查器窗口在对应的文本框中修改其值,或点击参数拖拽鼠标修改:这样会增加或减少相应字段的值。这通常是调整对象属性更简单的方式。
现在读者习惯了使用检查器修改立方体转换参数,接下来看观察对象和场景修改属性的几种方式。在视窗左上角有一个工具栏,如下图所示。
工具栏中包含了很多工具,其中有三个按钮为快捷方式(从左到右分别是)(1) 移动当前选中对象、(2)旋转当前选中对象以及(3)缩放当前选中对象。这三个按钮也可通过快捷键W、E和R进行使用。
在变换对象之前,我们可以试着平衡和旋转视图:
- 旋转对象:按下鼠标中键然后拖拽鼠标,可以看到会绕着所选中对象旋转视图。
- 平移视图:按下鼠标中键和SHIFT键,再拖拽鼠标,可以平移视图。
- 聚焦当前选中对象的视图:按下F键,会发现视图会重新聚焦于当前所选中的对象。
- 缩放:使用鼠标滚轮前后滚动进行缩小和放大。
在对立方体进行变换之前,我们先来看一个有用的坐标轴工具(gizmo)。这个工具见下图,位于场景视图的右上角,可用于从不同的坐标轴和视角查看场景。
在坐标轴工具中点击x、y或z轴,可看到相应坐标轴的场景。我们来操作一下:
- 连续点击坐标轴工具的x、y和z轴,查看视图变化。
- 注意通过点击左上角的透视按钮,可以在透视和正交(或对等轴)视图之间切换。
- 调整视图,可以按下鼠标滚轮、拖拽鼠标,就可以相应地旋转对象了。
讲解完以上下知识,让我们回到左上角工具栏,测试那三个用于转换节点的按钮。
首先试用移动工具:
- 从工具栏中选取移动工具或使用相应的快捷键W。
- 可以看到立方体有三个箭头。这些箭头是拖拽的手柄,让选中对象在特定的方向上(即延x、y或z轴)移动。
连续拖拽红绿蓝手柄时,可以看到对象会延相应坐标轴移动。
下面再试用旋转工具:
- 在场景树中选中myCube对象,按下F键将视图聚焦于该对象上。
- 从工具栏中选取旋转工具(左起第三个图标)或使用相应的快捷键E。
此时可以看到在该对象周围有红绿蓝三个圈。这些手柄用于拖拽延指定坐标轴(x、y或z轴)旋转所选对象。
手柄的颜色表示对象围绕旋转的坐标轴。例如,通过拖拽绿色手柄,可以延y轴旋转对象。同样蓝色和红色手柄分别用于延z和x轴旋转。
在拖拽这些手柄时,我们可以看到检查器中的对应旋转属性也发生了改变。
下面来试用缩放工具:
- 通过工具栏选择缩放工具(左起第四个图标)或使用相应的快捷键R。
- 应该会看到在对象周围有红绿蓝线及手柄。拖拽这些手柄可延指定坐标轴(即x、y或z轴)缩放所选对象。
手柄的颜色表示对象缩放所延的坐标轴。例如,通过拖拽绿色手柄,可延y轴缩放对象。蓝色(z轴)和红色(x轴)手柄也类似。同时注意拖拽中间空白区时,会进行统一变形。也就是说,缩放在3条轴(x、y和z轴)上是一致的。
至此,我们对一个新的立方体进行了多次转换,可能会希望重置其属性为初始创建时的。可以使用平移、旋转和缩放属性右侧的圆形箭头来实现,参见下图。
更多有关如何使用Godot软件的信息及小贴士,可以查阅Godot的官方文档。
添加颜色和纹理
这时在场景中就有了一个箱体,可以通过视窗查看,那么在场景中再加两个对象就更好了:一个是可以预览场景的摄像机,另一个是光照。
在添加颜色和纹理之前,我们将箱体重置为原始大小,并将缩放属性设置为(1,1,1):
- 在场景树中选择箱体。
- 使用检查器,定位到转换属性。
- 设置平移属性为(0,0,0)、缩放属性为(1,1,1)。
- 重置属性也可通过点击属性右侧的回旋箭头,如下图所示。
重置完箱体的转换属性后,下面来加摄像机:
- 在场景树中选中Spatial。
- 右击然后在上下文菜单中选择Add Child Node。也就是说新增的摄像机为Spatial根节点的子节点。
- 在新窗口中,输入camera搜索然后从列表中选中(即双击)类型为Camera的节点。
- 这时就会在场景树中新建一个Camera节点。
- 添加好摄像机后,视图中会出现下图所示的预览选项。
- 这一选项可借助摄像机镜头来预览场景。
- 点击Preview图标左侧的复选框,应该会显示下图所示的预览。
游戏的效果就是这样。现在我们在预览窗口中只能看到一个蓝色的天空,这是因为摄像机并未指向我们之前所创建的箱体。通过屏幕右侧的检查器窗口,也可以看到摄像机的各个属性。
其中可以看到摄像机所处的位置(x=0,y=0,z=0)以及它尚未进行旋转。
注意可通过选择View | 2 ViewPorts或按下CMD/CTRL + 2快捷键同时显示在视窗和一场景摄像机中的视图,参见下图。
下面为场景添加光照:
- 取消预览图标左侧复选框的勾选关闭预览模式。
- 为Spatial节点新建一个类型为DirectionalLight的子节点:在Spatial节点上右击,在上下文菜单中选择Add Child Node,在搜索框中输入directionallight,在菜单中选择DirectionalLight类型。
- 将其重命名为myLight。
完成以上操作后,我们会更改光照的方向让光位于立方体的上方向下照。
- 检查偏移和旋转的参数是否均为(0, 0, 0)。
- (通过移动工具)延y轴移动光源,让其位于立方体之上,比如位于(0, 3, 0)。
- 还可使用检查器延x轴将光照旋转-90度:设置旋转属性为(-90, 0, 0)。
- 使用坐标轴工具延x轴查看场景,,可以清晰地看出光照向下,如下图所示。
对光照的位置满意之后,可以旋转视图从不同角度查看该对象,以及通过预览查看场景。
这样光照和立方体都设置好了。便我们希望摄像机出现在场景中,从上方来看立方体。相应地我们会通过检查器修改摄像机的属性来实现这一功能。注意我们还会在场景中添加多个相机,在场景不同区域中显示由它们捕获的图像,稍后会学习这一功能。
让它位于立方体的上方朝下拍摄,修改转换设置如下:
- 平移(0, 4, 0):把摄像机从地面向上提4米。
- 旋转(-90, 0, 0):延x轴将摄像机旋转-90度。
做完以上修改,场景应该会如下图所示。读者可能注意到在主视窗中,摄像机的范围通过类似金字塔的形状表示,在我们的场景中包裹着立方体。这表示立方体位于摄像机的拍摄范围内。我们可以在视窗右下角的摄像机预览窗口中进行查看。
配置好摄像机后,我们来修改光照的属性。我们会修改其颜色和强度,所做的修改如下:
- 在场景树中选择名为myLight的光照。
- 在检查器中可以看到名为Light的属性,包含光照的属性(不含转换属性)。点击Color标签右侧的方块。这时就可以修改光照的颜色了。在游戏中设置气氛以及添加不同颜色的光照时会用得上。
- 点击这个方块后,会出现一个标记为Color的窗口。该窗口类似于图像编译软件中所使用的,如Gimp或Photoshop,根据RGB码定义颜色。
有些读者可能不熟悉RGB码,它是红绿蓝的英文缩写,可以看成一个指定红、绿、蓝含量的调色板,用于创建新的颜色。在这个窗口中,每种颜色的含量是一个0到255之间的数值。所以如果使用(R=255, G=0, B=0),则会得到红色。
- 在颜色窗口中进行点击,RGB的组成会有相应的变化。可根据自己的喜好选择一个颜色,比如淡蓝色。
修改好光照的颜色后,会看到箱体变成了蓝色。切换成预览窗口后也是同样的。
使用箱体创建地面
至此,我们的场景中已经有了立方体、摄像机以及(淡蓝的)光照。但我们希望在场景中建造一个人物行走的地面,甚至是跳跃或在台阶上行走。创建这个环境的第一步是创建地面。完成这一任务我们可以回收已创建的箱体,修改其尺寸和外观如下:
- 选中myCube箱体。
- 将缩放属性修改为(40, 1, 40)。也就是延x轴和z轴放大40倍。
- 在场景树中将该箱体命名为ground。
现在已经重置好了地面的大小,添加纹理会让其显得更为真实。我们会根据资源包中已含有的纹理为箱体设置一个新材质。
- 选中ground对象。
- 使用检查器定位到CSGBox区块,点击Material属性右侧的向下箭头。
- 在上下文菜单中,选择New Spatial Material,这表明我们在创建一个会应用于3D对象的材质(即Spatial Material)。
- 此时在该区块中会看到一个球体,如下图所示。
- 点击这个球体,会显示一个针对刚刚创建材质的属性列表。
- 点击名为Albedo(反照率)的参数,会在其右侧显示一个白框以及一个添加材质的选项。通过它们可以设置地面的颜色和材质。
- 现在我们会设置地面的材质,将资源包中的tile拖到文件系统中。
- tile.jpg出现在文件系统栏中之后,就说明已经导入到项目中了。
- 从文件系统栏中将材质拖放至材质属性中,如下图所示。
- 查看视窗,可以看到材质已应用至地面对象。
- 如果看得够仔细,会看到该材质在地面上仅重复了一次。
要将图案修改为重复(平铺)多次,可进行如下操作:
- 在场景树中选中ground对象。
- 在检查器中,找到CSGBOX区块。
- 点击Material标签右侧的球体。
- 找到Uv1区块。
- 将缩放属性设置为(5, 5, 5)。
- 在做完修改后,可以放大查看地面。
- 可以在视窗中看到,图案的平铺变得更密集了。
添加多色箱体和台阶
在对场景新增对象前,我们修改下光照的属性,使用其可以照亮场景。
- 选中光照myLight。
- 使用检查器窗口将energy属性(位于Light区块中)修改为6。
- 将其y轴坐标修改为10。
完成以上操作之后,我们会使用复制快速添加一系列的箱体:
- 创建一个新立方体:在Spatial节点上右击,选择Add Child Node,在搜索框中输入box并选择节点类型CSGBox。
- (在场景树或检查器中)将这个立方体命名为redBox。
- 修改立方体的y轴坐标(位置)让其位于地面之上,比如将位置设置为(0, 2, 0)。
下面对这个立方体设置颜色,流程类似于地面的图案:
- 在检查器中找到CSGBox区块,点击Material属性右侧的向下箭头。
- 在上下文菜单中,选择New Spatial Material,这表明我们在创建一个会应用于3D对象的材质(即Spatial Material)。
- 此时在该区块中会看到一个球体,如下图所示。
- 点击这个球体,会显示一个针对刚刚创建材质的属性列表。
- 点击名为Albedo(反照率)的参数,会在其右侧显示一个白框以及一个添加材质的选项。通过它们可以设置箱体的颜色和材质。
- 点击Color标签右侧的白框。
- 在出现的颜色窗口中选择红色并关闭颜色窗口。
- 放大redBox对象可以更清楚地看到立方体的各个面都应用了红色。
创建好了第一个带颜色的立方体,我们可以连续复制快速创建相似立方体的流程:
- 在场景树窗口中,选中redBox对象。
- 复制该对象:可以右击该对象然后在菜单中选择Duplicate或按下快捷键CTRL/CMD+D。
- 重命名这个新立方体(复制的立方体)为greenBox,(使用红色手柄)延x轴移动。
和前面一样,我们为其增加绿色:
- 在场景树中选择greenBox对象。
- 使用检查器定位到CSGBox区块。
- 读者会看到箱体已经拥有了红色材质,这很正常,因为我们是通过红箱体进行的复制。
- 我们需要对该立方体新建一个材质,因为我们希望它是绿色的(而非红色)。
- 点击Material属性右侧的向下箭头。
- 在弹出菜单中选择New Spatial Material,这表明我们在创建一个会应用于3D对象的材质(即Spatial Material)。
- 此时在该区块中会看到一个球体,如下图所示。
- 点击这个球体,会显示一个针对刚刚创建材质的属性列表。
- 点击名为Albedo(反照率)的参数,会在其右侧显示一个白框以及一个添加材质的选项。通过它们可以设置箱体的颜色和材质。
- 点击Color标签右侧的白框。
- 在出现的颜色窗口中选择绿色并关闭颜色窗口。
- 此时会看到第二个箱体已应用了绿色。
我们再复制一个绿色立方体(默认其名称为greenBox2)并延x轴进行移动。
此时就有了三个不同颜色的箱体,我们可以通过摄像机镜头来查看场景,请将摄像机的位置调整为(0, 10, 0),通过在主视窗中点击预览图标左侧的复选框开启预览模式,现在就可以从上方查看场景了。
创建简单的台阶
我们已经学习了如何创建对象,再来学习一些快速创建场景的快捷方式。我们借用通过箱体创建台阶的简单示例来进行学习:
- 关闭预览模式。
- 关闭(隐藏)greenBox2和redBox两个对象。只需要选择这两个对象然后点击其右侧的眼睛图标即可。
- 点击完这些图标后,对象就会隐藏起来,眼睛图标也会变成闭眼的状态。
- 选择greenBox对象。
- 将缩放设置调整为(1.5, 0.2, 1)。
- 连续复制3次。会分别创建greenBox3、greenBox4和greenBox5这三个对象。
- 延x轴和y轴移动复制对象让它们形成一个台阶。
- 比如,greenBox对象位于(3, 2, 0),greenBox3对象位于(6, 2.5, 0),greenBox4对象位于(9, 3, 0),greenBox5对象位于(12, 3.5, 0)。
管理及搜索资源和对象
在前面我们学习到可以使用搜索窗口和关键词来在项目和场景中查找指定的资源和对象。下面就在场景树中试试搜索功能吧:
- 在场景树的左上角可以看到一个搜索窗口。可根据对象名称在场景中进行查找。
- 如果在搜索框中输入box一词,会列出所有名称包含box的对象,如下图所示。
类似地,如果输入green一词,会列出所有名称中包含green的对象。
我们再来看如何在文件系统栏进执行搜索:
- 在文件系统栏的左上角可以看到一个搜索窗口。
- 输入tile一词后,Godot会显示所有名称中包含该词的资源。本例中会包含一个稍前导入的材质(即tile.jpg)。
同样可以在检查器标签中执行搜索,来查看节点的属性:
- 在场景树中选择greenBox节点。
- 在检查器窗口中的搜索框中输入mat一词。
- 这会列出名称包含mat一词的属性,本例中Godot会列出名为Material的属性。
另一个有趣的功能是对节点分组。比如我们创建了台阶。可能会需要整体而非逐一移动这些台阶。在Godot中,可以通过创建父节点组合这些台阶,这在场景树视图中经常称为空间节点(3D场景)。下面学习如何实现:
- 清空场景树搜索框中的内容。
- 在场景中已存在的Spatial节点上右击。
- 在弹出的窗口搜索框中输入Spatial。
- 在列表中选择Spatial。
- 这会新建一个名为Spatial的子节点。
- 将该对象重命名为container-parent。
- 然后在场景树中选择greenBox。
- 按下CTRL/CMD键连接点击组成台阶的所有箱体,即对象greenBox3、greenBox4和greenBox5。
- 确保未选中container-parent对象,将所有选中的对象拖到container-parent对象之中。
- 应该会在container-parent对象的左侧看到一个向下的箭头,这表示此前选中的所有对象都进入到该对象之下了,如下图所示。
- 在层级视图中选中container-parent对象后再使用移动工具,不仅会移动该对象还会移动其子对象。
保存场景
至此我们就可以保存场景了:
- 选择Scene | Save Scene。
- 为场景选取一个名称,如scene1。
- 点击Save。
默认场景保存在当前项目中。可以使用文件系统栏的搜索框查找项目中的所有场景。
构建和导出场景
这一部分中,我们会导出场景,让其可在Godot之外可视化显示。需要导入一些Godot来导出场景以及配置导出设置。
下面就开始实操:
- 选择菜单Project | Export。
- 在弹出窗口中,点击Add按钮。
- 这时会显示游戏可导出的平台列表。
- 如果使用的是MacOS请选择Mac OSX,或者根据所使用的操作系统选择Window Desktop或Linux/X11。
- 在新窗口中,平台会显示在左手边,如下图所示。
- 应该还会在窗口底部看到一条消息,内容是缺失导出模板。
出现这个消息是因为Godot需要在导出场景前安装导出模板,可通过如下步骤进行安装:
- 点击其中的文本链接Manage Export Templates。
- 这时会打开Export Template Manager。也可通过选择Editor | Export Template Manager打开这一窗口。
- 如下图中所示。Godot会告诉你当前版本所缺失的模板。
- 点击Download and Install按钮下载相应的模板,也可通过线下文件进行安装(Install from File)。
- 接下来就会开始下载,安装包还是比较大的,根据网络情况会花费一些时间。
- 下载完成后会自动安装。
安装完成后,只需再指定导出的场景即可完成导出:
- 选择Project | Project Settings。
- 在General标签中,选择Run选项,然后点击Main Scene标签右侧的文件夹图标。
- 在弹出的窗口中选择刚刚创建的场景(如scene1)再点击Open。
- 此时scene1应该会成为项目的主场景。
指定好了主场景后就可以导出项目了。
- 在主菜单中选择Project | Export。
- 设置Identifier,如com.example.game,然后点击Export Project。
- 在弹出的窗口中为导出文件设置一个名称,如demo1.dmg,然后点击Save。
- 导出完成之后,可以导航至创建导出游戏的文件夹,这时应该会看到一个可执行文件demo1.dmg。
- 双击该文件应用会打开,这时会显示从上方查看的场景。
也导出供web使用,但导出的文件为Web Assembly,需要托管在服务器,虽然支持,但本文中不做探讨。
小结
本文中,我们学习了Godot的一些核心功能。读者对软件更为熟悉了并且知道如何以及为何使用各种视图。我们学习了如何添加和转换内置资源,包括立方体、光照和摄像机。我们还了解通过导入或创建材质来修改箱体的外观。
根据所学知识,我们创建一个简易的台阶和地面。我们学习了在项目中管理资源的一些方式,有(使用空间节点)进行分组和在各搜索窗口进行搜索。
最后还讲解了如何将场景导出为可执行文件。
更多内容:Godot从入门到精通系列文章