场景与节点

简介

../../_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(标签)节点。点击场景面板左上角的“添加子节点”按钮(加号图标)。这是往场景中添加新节点的主要方式,会把新建的节点加到当前所选节点下,成为其子节点(如果是空场景,新建节点则会成为根节点)。

注解

在(没有根节点的)空场景中,场景面板会显示一些快速添加根节点的选项。“2D 场景”会添加 Node2D 节点,“3D 场景”会添加 Spatial 节点,“用户界面”会添加 Control 节点,“自定义节点”则会让你自己选择节点类型(所以和点击“添加子节点”按钮的效果是一致的)。点击星形按钮可以切换是否显示收藏的节点。

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

所以,往这个场景里添加标签节点的话,无论是点击自定义节点按钮,还是点击顶部的添加节点按钮都可以。而如果是往非空场景里添加子节点,就得使用添加节点按钮。

../../_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 单例在运行时来添加自定义配置选项,并读取它们。

未完待续...

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