场景与节点

简介

../../_images/chef.png

试想一下您不再是一个游戏开发者。相反地,您是一位厨师!把您时髦的着装换成无檐帽和双排扣夹克。现在,您是在为您的客人打造一个美味的菜谱而不是在做游戏。

那么,厨师如何制作菜谱呢?菜谱分为两个部分:第一部分是成分,第二部分是准备它的说明。这样,任何人都可以按照菜谱来品味你的宏伟创作。

在Godot中制作游戏感觉和这种方式相同。使用这个引擎感觉就像是在一个厨房里。在这个厨房里,节点 就是装满了用于烹饪的新鲜材料的冰箱。

有很多种类型的节点,有的显示图像、有的播放声音、有的节点显示3D模型等等。它们有数十个。

节点

但让我们从基础开始。节点是创建游戏的基本构建块。如上所述,一个节点可以执行各种特定的功能。但是,任何给定节点始终具有以下属性:

  • 有名字。
  • 具有可编辑的属性。
  • 可以接收回调以处理每个帧。
  • 可以被扩展(以具有更多功能)。
  • 可以作为子节点被添加到其他节点上。
../../_images/tree.png

最后一点很重要。节点能够持有其他节点作为子节点。以这种方式编排时,这些节点就会变成一棵

在Godot中,以这种方式来编排节点的特点为组织项目创造了一个强有力的工具。因为不同的节点有不同的功能,将它们组合起来则允许创建更多复杂的功能。

如果现在没有领悟它,不要担心。我们会再接下来几节里继续探讨。目前要记住最重要的一点是:有节点这个东西存在,并且能够按这种方式来编排。

场景

../../_images/scene_tree_example.png

既然现在已经定义了节点的概念,那么下一个合逻辑的步骤就是解释场景是什么了。

一个场景是由一组分层组织(以树形方式)的节点组成。此外,一个场景:

  • 始终有 一个 根节点。
  • 能够被保存到磁盘上,也能被载入回来。
  • 能够被 实例化 (稍后详细说明)。

运行一个游戏意味着运行一个场景。一个项目可以有多个场景,但是为了游戏的启动,必须有一个作为主场景。

本质上,Godot编辑器就是一个 场景编辑器 。它有很多用于编辑2D和3D场景以及用户界面的工具,但是编辑器是基于编辑场景及构成场景的节点的概念的。

编辑器

打开您在 :ref:`doc_intro_to_the_editor_interface`中创建的项目,或创建一个新项目。这将打开Godot编辑器:

../../_images/empty_editor.png

正如前面提到的,在Godot做游戏感觉就像在厨房,所以让我们打开冰箱,为项目添加一些新的节点。我们将以在屏幕上显示“Hello World”消息开始。

为此,我们需要添加 Label(标签)节点。点击场景面板左上角的“添加子节点”按钮(加号图标)。这是往场景中添加新节点的主要方式,会把新建的节点加到当前所选节点下,成为其子节点(如果是空场景,新建节点则会成为根节点)。

注解

In an empty scene (without root node), the scene dock shows several options to quickly add a root node to the scene. "2D Scene" adds a Node2D node, "3D Scene" adds a Spatial node, "User Interface" adds a Control node, and "Other Node" which lets you select any node (so it is equivalent to pressing the "Add Child Node" button). You can also press the star-shaped icon to toggle the display of your favorited nodes.

此处的预设仅仅是为了方便,而不是对各类场景的强制要求。不是所有的 3D 场景都要以 Spatial 节点为根节点,同样,GUI 和 2D 场景的根节点也不一定要是 Control 节点和 Node2D 节点。

Now, to add a label node to this scene you can click on the Other Node button or the Add Node button at the top. In scenes that aren't empty you use the add node button to create every child node.

../../_images/newnode_button.png

这将会打开创建节点对话框,展示了一长串能够被创建的节点列表:

../../_images/node_classes.png

在这里,先选择 Label 节点。直接搜索它可能是最快捷的方式:

../../_images/node_search_label.png

最终,创建了一个标签!当创建按钮被按下时,很多事情就发生了:

../../_images/editor_with_label.png

首先,场景更改为2D编辑器(因为标签是一个2D节点类型),并且标签出现在视图的左上角,处于选中状态。

The node appears in the scene tree editor in the Scene dock, and the label properties appear in the Inspector dock.

下一步就是去改变标签的 文本 属性了,我们来把它改成“Hello,World!”:

../../_images/hw.png

Ok, everything's ready to run the scene! Press the PLAY SCENE Button on the top bar (or hit F6):

../../_images/playscene.png

然后……哎呀。

../../_images/neversaved.png

场景需要被保存才能被运行,所以在 场景(Scene) ‣ 保存菜单(Save) 中将场景保存成文件如Hello.tscn:

../../_images/save_scene.png

然后,有趣的事情发生了。这个文件对话框是一个特别的文件对话框,只允许保存在项目内。项目根目录是 res://,意为“资源路径”(resource path)。这也就意味着,文件只可以被保存到项目的内部。以后,当在Godot进行文件操作的时候,记住 res:// 就是资源的路径,无论哪种平台和安装位置,它都是定位游戏内部的资源文件位置的方式。

在保存场景并再一次按下运行场景之后,“Hello World”演示示例应该最终被执行了:

../../_images/helloworld.png

成功!

注解

如果这不能立即工作并且在至少一台显示器上有hiDPI显示,请转到 项目(Project) ‣ 项目设置(Project Settings) ‣ 显示(Display) ‣ 窗口(Window) 然后在 Dpi 下启用 允许Hidpi

配置项目

好了,是时候配置项目了。现在,唯一运行某些东西的方式就是执行当前的场景。然而,可能有多个场景,因此其中一个必须被设定为主场景。这个场景是将会在项目运行时被载入的场景。

这些设置将全部被存放在 project.godot 文件中,一个 win.ini 格式的普通文本文件(以便编辑)。在这个文件中有数十个设置可以被修改,来更改项目的执行方式。为了简化此过程,Godot提供了项目设置对话框,作为编辑 project.godot 文件的前端。

要访问这个对话框,选择 项目(Project) ‣ 项目设置(Project Settings)`。现在就试试吧。

窗口打开后,让我们选择一个主场景。定位到 应用程序(Application) ‣ 运行(Run) ‣ 主场景(Main Scene) 属性然后点击以选择 Hello.tscn

../../_images/main_scene.png

现在,通过此更改,当您按常规播放按钮(或 F5)时,无论正在编辑哪个场景,该场景都将运行。

项目设置对话框提供了许多能够被保存至 project.godot 文件的选项并且显示出了它们的默认值。当您改变了一个值,一个对勾被标记在属性名的左侧。这意味着这个属性将被保存到 project.godot 文件中并被记住。

另外,还可以使用 ProjectSettings 单例在运行时来添加自定义配置选项,并读取它们。

未完待续...

这篇教程谈论了“场景和节点”,但是目前为止,还只有 一个 场景和 一个 节点!别担心,下一篇教程将会展开讨论…