跳至内容

Godot游戏引擎指南/什么是节点

100% developed
来自Wikibooks,开放世界中的开放书籍

节点是Godot的构建块。它们可以组合成数万亿种不同的组合。有许多不同类型的节点,例如Camera2DSprite2D

3种主要节点类型

[编辑 | 编辑源代码]

每个节点都位于此节点之下。它是定义所有其他节点的基本节点。可以将其视为Godot及其节点以及Godot已用于的所有游戏的父节点和祖父母节点。它存储诸如名称和脚本之类的常见内容。在创建存储数据且不需要显示在屏幕上或具有位置的对象时,可以使用它,而不是使用CanvasItemSpatial

CanvasItem

[编辑 | 编辑源代码]

与Node不同,Canvas Item具有位置,并实现绘制代码。它们用于所有2D对象,并且具有两种继承它的主要节点类型。

用于GUI。它包含诸如是否忽略鼠标输入、接收它并将其传递给其他UI或接收它并阻止它到达其他UI之类的选项。它们还允许边距和锚点,允许控件节点停留在屏幕的特定部分或在窗口扩展或缩小时进行拉伸。

这些用于2D游戏元素,例如Sprite2DPhysicsObject2D。它们绘制在画布上,画布绘制在3D视图的顶部。好吧,实际上是反过来的。如果场景中存在活动的Camera3D,则3D实际上绘制在画布的背景中。

用于3D游戏元素。它们存储位置数据、旋转和缩放。它们不会绘制到屏幕上。为此,您需要使用继承Spatial的VisualInstance 节点。您需要在场景中启用Camera3D才能实际看到3D世界。

创建自定义节点

[编辑 | 编辑源代码]

首先,您需要确定它将执行什么操作。它是否是Timer 的某种变体?还是自定义的Button

在确定其功能后,必须确定它继承自哪个节点。这一点很重要。如果您想要一个3D按钮,则不要使用控件,或者对于计时器,不要使用Spatial。

在我看来,这是您要创建的每种类型的对象的推荐节点。

节点:用于不会成为GUI、2D或3D世界一部分的对象。现有的示例包括计时器、HttpRequestsCanvasLayer

Node2D:用于不是在GUI中使用的游戏的对象。有一些例外,但总的来说,不要过多地混合Node2D和控件。

控件:用于GUI,例如菜单、HUD和某些需要锚点和边距的游戏元素。

Spatial:仅用于3D。

有关创建节点的更多信息,请参阅创建节点

每个节点都有多个属性。例如,Node具有其name属性,或者Node2D具有位置数据。每个继承它的节点都获得它的属性。一个简单的例子

节点:名称、脚本、其他
  • Spatial:节点的属性;位置;旋转;缩放,其他
  • CanvasItem:节点的属性;可见性;其他
    • Node2D:CanvasItem和Node的属性;位置;旋转;缩放;其他
    • 控件:CanvasItem和Node的属性;矩形位置、大小和缩放;旋转;其他
      • ColorRect:控件、CanvasItem和Node的属性;颜色

场景树

[编辑 | 编辑源代码]

Godot有构建块,是的,但将所有这些粘合在一起的粘合剂是什么?

SceneTree是粘合剂,它是一种强力粘合剂。但它也是一种灵活的粘合剂。它是一个对象(它是所有Godot“事物”的曾曾祖父/祖母)。

SceneTree是所有事情发生的地方。节点按特定顺序处理、绘制在屏幕上等等。

注意

在本指南中找到的教程中,我将提到某物添加为其他某物的子节点。这意味着将一个节点添加为另一个节点的子节点。一个按钮可能是容器 的子节点,而容器可能是普通控件的子节点。

在制作游戏时,每个菜单、每个关卡和每个对象都是一个场景。你将它们保存在文件系统(简称“fs”)上,然后可以将这些场景放入其他场景中。你可以创建一个敌人场景,保存它,然后在你的“关卡 1”场景中根据需要放置多次。这被称为实例化场景。

继承场景可以被认为是实例化的反面。继承的场景就像场景的副本,但修改的自由度有限。这对于拥有一个基础敌人场景非常有用,然后为添加的每个敌人继承它,并进行修改。这可以保持你的敌人一致,并使每个文件更容易理解。这与继承节点非常相似,除了多个节点被继承而不是创建一个新的继承脚本。

注意

不要混淆继承场景和继承节点/脚本。

例如,在“关卡 6”中,你必须与游戏中常见的敌人的变异版本作战。你只想在整个游戏中使用它一次,因此不值得继承敌人场景并为仅使用一次的敌人创建一个全新的文件。相反,在关卡 6 中,右键单击要在场景面板中修改的敌人。选中“可编辑子节点”复选框,并进行修改。这与继承场景几乎完全相同,只是你没有创建新文件。

如果你决定变异敌人也适合其他关卡,或者在一个关卡中使用多次,请左键单击场景面板中的敌人,然后单击“另存为场景分支”。这会将节点保存为一个包含修改内容的场景,以便在任何其他关卡中重用。

警告

如果你重命名或移动启用了可编辑子节点的节点,则需要重新启用它,否则更改将会丢失!

如果你手动禁用它并忘记在关闭场景或编辑器之前启用它,更改也将丢失。

添加节点

[编辑 | 编辑源代码]

好的,现在你知道了可以做什么,如何做这些事情呢?

让我们创建一个简单的场景。打开 Godot 项目管理器。左侧是一个按钮列表。点击新建项目。应该会出现一个弹出窗口。在“项目路径:”下按浏览,并选择存储游戏的文件夹。最好将所有游戏都放在同一个文件夹中,以便于访问。完成后,按“创建文件夹”,输入类似“Godot 测试项目”的内容,然后点击确定。然后点击“选择当前文件夹”,并创建并编辑

现在 Godot 应该会打开。在左侧,应该有一个场景面板,上面有一些按钮。点击用户界面。双击显示“控制”的部分,并将其重命名为测试 UI

现在,按下该面板中的白色“+”图标,应该会出现一个弹出窗口。在搜索栏中,输入标签。双击突出显示的菜单项以获取标签

在左侧的检查器面板中,查找属性文本。输入Hello world!(确保在场景面板中选择了标签)。屏幕顶部有一个布局按钮。点击它。将出现一个带有许多选项的下拉菜单。按居中。“Hello world!”文本出现在 2D 视口(编辑器中间的大部分)中的蓝色框的中心。

布局按钮

现在你知道了如何添加节点,如果你犯了错误,如何删除它们呢?最快的办法是撤消(在 Windows 上按“Control+z”)。如果节点不是最近创建的,请改用左键单击场景面板中的节点。点击删除节点(s)。如果你删除了一个不想删除的节点,只需按撤消即可。如果你按了太多次撤消,可以重做(在 Windows 上按“Control+Shift+Z”)。

现在使用“Control+S”保存你的场景。不要更改文件名。你也可以使用“Control+Shift+S”保存到不同的场景。

实例化和可编辑子节点

[编辑 | 编辑源代码]

要将节点及其子节点保存为单独的场景文件,请左键单击该节点,然后单击另存为场景分支。对于此实验,请在你的标签上执行此操作。文件名应为Label.tscn。按“保存”。

找到你的标签场景,但不要打开它。将其拖放到场景面板中“测试 UI”节点上。最初它会出现在面板上,但不会出现在视口中。这是因为两个标签都叠加在一起。在场景面板中单击第二个标签,然后单击屏幕顶部的移动按钮(或按 w)。向任何方向拖动以查看新标签。

打开Label.tscn场景,并将另一个标签作为根节点(也应该是标签)的子节点添加。将文本属性更改为“标签编号 2”。保存场景。返回到测试 UI场景,并注意新旧标签如何重叠?返回标签场景,选择第二个标签并通过点击“Shift+向下箭头”5 次将其向下移动。保存。转到另一个场景。两个标签场景都正确显示,而不仅仅是一个。

在场景中的第二个标签上,左键单击并选中可编辑子节点。点击灰色标签按钮(第二个标签的子节点),并将它的文本属性更改为“已编辑子节点”。另一个标签和Label.tscn场景没有改变,但你更改的那个变了。

右键单击具有可编辑子节点的标签,然后按设为本地。现在修改后的标签场景不再链接,你可以进行一些更精细的调整,例如重命名子节点或删除它。你可以试用你的新场景,或继续操作。

你学到了什么

[编辑 | 编辑源代码]
  1. Godot 中有哪些节点以及如何使用三个基本节点中的每一个。
  2. 如何将场景实例化到另一个场景中,以及如何将现有节点保存到新的场景中。
  3. 关于节点继承。
  4. 如何启动新项目。


1 命名三种主要节点类型之一:

2 可编辑子节点是否允许你编辑原始场景?

3 你可以从另一个场景实例化一个场景,然后从两个不同的场景实例化场景吗?

4 以下哪一个是所有其他节点继承的?

节点
对象
场景树
CanvasItem


Godot 游戏引擎指南

入门 [编辑]
安装
什么是节点?
编程
资源和导入
信号和方法
你的第一个游戏
使其工作
调试
输入
物理
保存和加载
多人游戏
使其看起来更好
UI 皮肤
动画
高级帮助
服务器(单例)
平台特定
优化
加密
导出
插件
其他
有用链接
作者和贡献者
印刷版


<-- 上一页 返回顶部 下一页 -->


华夏公益教科书