Godot从零开始的教程—3去往遥远的群星
飞行的宇宙飞船:你的第一个场景和脚本
https://www.bilibili.com/video/BV1zu411Y7mF?p=1
欢迎来到您的第一个游戏项目。
您已花费数小时学习编程基础知识。现在,是时候让事情变得更有趣了:您将一头扎进游戏开发中。
在课程的这一部分,您将通过制作玩具和迷你游戏来学习。我们将进行许多不同规模的项目。
通过这些项目,您将重用和构建您在Learn GDScript 应用程序中学到的一切。
你的第一个项目:宇宙飞船
在第一个项目中,我们将制作一艘可以用键盘控制并进行加速的宇宙飞船。

首先,我们会让它非常迅速地移动和停止。然后,我们看看如何使用转向使其平稳移动。
你将学习:
如何将节点添加到场景并运行该场景。
如何通过附加 GDScript 代码来控制节点。
如何使用游戏循环让物体移动。
如何听取键盘输入并将控制权交给播放器。
如何使用计时器和信号进行限时提升。
在后续视频中,我们将首先编写一艘自行移动的船。然后,我们将向项目的输入映射添加播放器控件,并使用输入函数对播放器控件进行编码。我们最终将添加提升机制。

然后轮到您使用 转向行为使船平稳移动。

由于这是您的第一个项目,因此信息量可能有点大。
这很正常:一开始要学的东西太多了!我们不希望您记住这里的一切。
我们正在尝试创建真实的游戏机制,让您了解 Godot 的工作原理。
该项目的关键要点是场景、节点、信号和脚本的概念 。完成项目后,您会找到更深入的指南。
此外,您将在课程中一次又一次地看到该项目中介绍的每个功能,这将使您更好地记住它。
当然,我们还在每个视频下加入了很多其他新概念的解释。
请前往下一课,我们将开始一起编写我们的宇宙飞船。
导入项目
如果您还没有,请下载 godot-practice-*.zip
文件并解压缩。
链接:https://pan.baidu.com/s/1_iFZTWIU8WT2XCZZDrgzig?pwd=2k50
该课程以压缩档案形式提供。要访问这些文件,您需要从档案中提取它们。您的系统应该带有预安装的程序。
要解压缩文件:
在您的文件资源管理器中,导航到包含下载文件的文件夹。
右键单击 zip 文件并选择“解压”选项(Windows、Linux)。在 macOS 上,您需要双击该文件。
您应该会看到一个名为 zip 存档的新目录。它包含本教程和所有其他教程的所有课程文件。
启动 Godot,然后在打开的项目管理器中单击 Import。

导航到解压缩项目的位置,输入目录,然后双击project.godot
.

然后,单击导入和编辑。

就是这样,您已经导入了项目!
下次,您只需在项目列表中选择它:

注意:如果您需要,该文件 godot-complete-demos-*.zip
包含所有教程(但不包括实践)的完整代码。
如何跟上每节课
对于每一节课,您都应该在 Godot 中打开项目“Learn to Code with Godot: Practices”。如果有视频,您应该先观看视频,然后再阅读文本。您还应该按照说明在 Godot 中重现场景和代码。
我们的教程分为三个部分:
我们解释为什么我们做我们正在做的事情。跳过这部分可能很诱人,但请阅读它,我们认为这对您的学习很重要。
我们为您提供解释以供您跟进,并为您编写代码。抵制复制粘贴的诱惑。编程在很大程度上是一个习惯问题。反复编写代码对于学习来说是必不可少的。
我们为您提供交互式实践来训练新技能。他们的标题如“练习:……”。当您看到它们时,您应该通过单击右侧 GDQuest Practices dock 中的相应实践在 Godot 中打开指定的场景。
找到课程文件
首先,在 Godot 中打开项目“Learn to Code with Godot: Practices”,然后在FileSystem dock 中展开 MovingShip
目录,然后 展开01.MakingShipMove
目录,然后双击 MakingShipMove.tscn
. 教程见!
移动宇宙飞船
https://www.bilibili.com/video/BV1zu411Y7mF?p=2
在本视频中,我们将编写一艘自行移动的宇宙飞船。
在每个视频下方,您都会找到有关新概念的说明和 回答您的问题。

新概念
精灵
在游戏中,精灵是可以移动的图像。我们用这个词来谈论游戏中几乎所有的绘图:角色、怪物、门、箱子、武器、云等等。“精灵”一词在 2D 游戏中很流行。
您还会听到游戏艺术家称他们创建的任何图像都是“精灵”。
关键词extends
_
关键字extends
告诉计算机您的脚本直接从游戏引擎扩展代码。
例如,该行extends Sprite
告诉 Godot 将您的代码附加到 Godot 开发人员为该类型编写的所有代码 。这就是您可以像GDScript 一样访问 _process()
函数或成员变量的 方式。position
rotation
在 Godot 中,每个脚本都必须从游戏引擎扩展一个类型。正如我们在“添加节点”对话框中看到的那样,它
是引擎内置的众多节点类型之一。您将在课程的后面学习如何创建新类型和扩展它们。
速度
速度是将方向和速度组合成单个值的矢量。矢量的方向给了我们它的方向,它的长度代表了速度。
有关场景、节点和脚本的更多信息,请查看本章的专门指南。
你的问题
为什么用大写字母命名文件并且没有空格?
我们经常在代码中使用大写字母且没有空格的名称来表示大多数类型。这是一个约定,我们称之为“PascalCase”。
在这个项目中,我们对相关文件使用相同的约定。例如,我们用 PascalCase 编写文件、脚本和文件夹的名称。
我们这样做是因为 PascalCase 是 Godot 社区的标准约定。Godot 默认以 PascalCase 命名节点、场景和脚本文件,因此人们倾向于使用它。
您可以随心所欲地编写文件名。我们建议为每个项目选择一个约定并坚持下去。它有助于让您和您的队友轻松搜索和整理内容。
下一个视频将带您逐步完成第一个练习。
代码
这是本课后该船的完整代码清单。
extends Sprite
var velocity := Vector2(500, 0)
func _process(delta: float) -> void:
position += velocity * delta
rotation = velocity.angle()
你的第一次练习
https://www.bilibili.com/video/BV1zu411Y7mF?p=3
现在是您进行第一次练习的时候了,您将在练习中重现我们在本课中编写的代码。
由于这是我们的第一个项目,因此实践与课程非常接近。你应该把它们当作一个机会来排练和测试你刚刚学到的东西。实践将变得更具挑战性。
实践如何在课程中发挥作用
练习都是为了提高您的 Godot 和游戏开发技能。这就是为什么我们开发了一个系统,让您可以在 Godot 编辑器中轻松练习。这是它的工作原理。
在右侧,您会看到一个名为GDQuest Practices的停靠栏。它列出了课程中的所有练习。
每个练习都有一个专门的场景。要打开第一个练习场景,请单击其名称Making the ship move。

这将在视口中打开练习场景并显示您的目标、任务和提示。
在视口中,您应该会看到一个带有脚本的Sprite节点。

要完成练习,您需要通过多项检查,就像在Learn GDScript应用程序中一样 。
按 运行场景F6。这将在左侧显示检查并运行它们。对于每个失败的检查,右侧都会显示一条错误消息。

按F8停止播放场景并返回到编辑器。
要完成练习,您需要编辑场景及其脚本。使所有检查通过,完成标记将出现在编辑器中。
如果条件允许 经可能的关闭任何能够影响到你注意力的东西
用键盘控制飞船
在本视频中,您将添加输入映射和代码以使用键盘控制您的飞船。
https://www.bilibili.com/video/BV1zu411Y7mF?p=4

新概念
什么是对象?
在课程的第一部分,您会不时听到我们谈论对象。在 Godot 以及 Python 或 JavaScript 等编程语言中,对象是一种将数据和函数捆绑在一起的结构。
您已经遇到了几个对象:您的船Input
也是对象。
它们都将数据和函数捆绑在一个包中:例如,数组包含值(数据)并允许您访问成员函数,例如append()
.
在游戏开发中,您将一直使用对象。例如,Godot 中的每个节点都是一个对象。
这个概念现在可能有点抽象,但不要担心:您将在本课程的后面学到更多关于对象的知识。
输入
该Input
对象使您可以访问与 Godot 中的用户输入相关的所有功能。比如我们用它来获取带有函数的玩家的输入方向get_axis()
。
对象的许多功能都Input
需要输入操作。输入操作是您将键、鼠标按钮或游戏手柄按钮映射到的名称。我们准备了一份关于输入操作的回顾指南:将输入映射添加到您的游戏中。
方向向量
方向向量是最大长度为 的向量 1
。
我们经常通过将方向向量乘以速度值来计算游戏角色的速度。
在那种情况下,方向通常是一个二维向量,而速度是一个十进制值。将向量乘以十进制值会使向量变长或变短,同时保持其方向。
我们准备了一个额外的视频演示来向您展示方向向量的工作原理。
检查是否有输入方向
在本课中,我们direction
在以下条件下测试玩家的输入:if direction
。
使用此快捷方式时,Godot 会同时测试向量的x
和 值。y
如果它们都等于零,则条件失败。如果向量有任何其他值,则条件通过。
练习:聆听玩家输入
在godot-practice项目中,开启本项目的第二个练习,Listening to player input。
这一次,你的工作是让飞船听取输入。
你的问题
为什么有时在数字后加小数?
我们有时会在数字后添加一个小数位,即使它是 .0
. 这样做会告诉计算机这个值是一个 float
(十进制数)而不是一个int
(整数)。
然而,这在 GDScript 中通常是不必要的。虽然整数和小数对于计算机来说是不同的,但 GDScript 会根据上下文为您转换数字。
例如,在创建二维向量时,Vector2()
构造函数只采用十进制值。

即使您写的是整数,计算机也知道您的意思是使用十进制值并照此处理。
那你为什么要.0
在数字后面打字呢?它使您的代码更加精确。当您需要在几周后修改它并且小数点很重要时,它特别有用。
.0
出于这个原因,我们通常总是写小数位,即使它们是 。但是,它们是您不应该担心的细节。
为什么我们在过程函数之外定义速度而在过程函数内部定义方向?
从技术上讲,我们可以像定义 变量一样定义函数velocity
内部 。这样做会在每一帧重置变量。_process()
direction
然而,为了让飞船在系列后期顺利移动,我们需要velocity
在帧之间保持它的值,这就是我们在脚本顶部定义它的原因。您将需要在大多数角色移动脚本中这样做。
为什么我们用 Vector2.ZERO 的值定义速度?
创建变量时,最好给它们赋值。这允许我们通过编写来使用类型推断:=
。此外,如果您忘记设置变量的初始值,有时您的代码可能会出现错误。
在这种情况下,起始值不是很重要,因为我们重新计算velocity
每一帧。我们只是经常用 的值初始化 2D 向量Vector2.ZERO
。
代码
到目前为止,这是该船的完整代码清单。
extends Sprite
var max_speed := 600.0
var velocity := Vector2.ZERO
func _process(delta: float) -> void:
var direction := Vector2.ZERO
direction.x = Input.get_axis("move_left", "move_right")
direction.y = Input.get_axis("move_up", "move_down")
# If we don't do this and the player moves diagonally, they will move 40%
# faster than normal.
if direction.length() > 1.0:
direction = direction.normalized()
velocity = direction * max_speed
position += velocity * delta
if direction:
rotation = velocity.angle()
在下一个视频中,我们将使用信号来编写增强机制的代码。
使船舶升压
在本视频中,您将使用信号为您的飞船编写在短时间内提升速度的代码。
https://www.bilibili.com/video/BV1zu411Y7mF?p=5

信号
信号允许节点相互通信和做出反应。它们是节点在发生某些事情时发出的消息。例如,a 在超时时"timeout"
您可以连接一个信号和一个节点。当您这样做时,每次发出信号时,Godot 都会调用连接的函数。它是同步发生的:在视频中,当"timeout"
信号发出时,连接的_on_Timer_timeout()
函数在同一帧中被调用。
您将在本课程和您的项目中大量使用信号。它们是 Godot 最有用的核心功能之一。
获取节点
在 GDScript 中,您可以通过调用函数来访问子节点 get_node()
。此函数需要一个参数:目标节点相对于您附加脚本的节点的路径。
例如,在下图中,您可以 通过调用 来 从Player节点访问BodySprite节点。get_node("Pivot/BodySprite")

一旦你得到一个节点,你就可以调用它的函数并使用点 ( .
) 运算符访问它的变量,就像我们 get_node("Timer").start()
在视频中写的那样。
实践:提升机制
在Godot实践项目中,开启第三个实践,The boost mechanic。
在本练习中,您将重现我们在本课中看到的提升机制。
您需要在场景中添加一个计时器,连接到它的信号,并在按下输入boost
操作时使飞船加速。
代码
到目前为止,这是该船的代码。
extends Sprite
var boost_speed := 1500.0
var normal_speed := 600.0
var max_speed := normal_speed
var velocity := Vector2.ZERO
func _process(delta: float) -> void:
var direction := Vector2.ZERO
direction.x = Input.get_axis("move_left", "move_right")
direction.y = Input.get_axis("move_up", "move_down")
if direction.length() > 1.0:
direction = direction.normalized()
if Input.is_action_just_pressed("boost"):
max_speed = boost_speed
get_node("Timer").start()
velocity = direction * max_speed
position += velocity * delta
if direction:
rotation = velocity.angle()
func _on_Timer_timeout() -> void:
max_speed = normal_speed
在下一部分中,您将向节点添加转向。这一次,您不会有视频:相反,您必须阅读简短的指南并使用代码清单来修改您的飞船。
它可能不如观看视频舒服,但同时对您有好处:它是一种更积极的学习形式。
平稳地操纵船
在本课中,我们将使用转向行为使我们的船移动得更加顺畅。

转向行为是一种计算,可让您使用通常很少的代码使角色和 AI 平稳移动。它们导致自然运动和平滑曲线。
目前,在每一帧中,我们都会立即改变速度。当玩家按下方向键时,船会以最大速度移动。如果玩家释放钥匙,船就会停止。

我们希望飞船平稳地加速和减速。为此,我们将使用转向行为。
转向行为是我们用来使物体平稳移动的一类算法。转向行为使用矢量计算使对象转向目标位置。
我们将看到的第一个转向算法是最简单的:它只需要两三行代码就可以极大地改善运动。
var desired_velocity := speed * direction
var steering_vector := desired_velocity - velocity
velocity += steering_vector * drag_factor
我们将在下面对其进行分解。
跟随转向行为
这种转向行为会逐渐改变船只的速度以朝向目标移动。
它通过计算我们所说的“所需速度”来工作。那是船在输入方向上以最大速度立即行驶。我们将其与当前速度“比较”。
我们可以像这样表示当前和期望的速度向量。

想象一下船向左行驶,玩家按下右键。我们如何让船向右转?
我们首先计算两个速度之间的差异。这就是我们所说的转向矢量

为了让船平稳地转弯,而不是在每一帧以所需的速度移动,我们将一小部分转向矢量添加到当前速度。这样做会使船逐渐转向 目标速度。

到目前为止,我们用一行代码计算了速度。
func _process(delta: float) -> void:
# ...
velocity = direction * speed
注意:当我们写#...
代码清单时,它代表我们突出显示的行之前或之后的代码行。否则,如果我们每次都包含每一行代码,那么重要的或新的代码行将变得难以发现。
为了获得平滑的运动,我们需要用三行代码替换更新船速的行。我们还添加了一个新变量,即drag_factor
:
var drag_factor := 0.1
func _process(delta: float) -> void:
# ...
var desired_velocity := max_speed * direction
var steering_vector := desired_velocity - velocity
velocity += steering_vector * drag_factor
# ...
我们首先计算所需的速度:船在输入方向上以最大速度移动。
var desired_velocity := max_speed * direction
然后我们计算所需速度与当前速度之间的差异。
var steering_vector := desired_velocity - velocity
请注意,放置向量的顺序很重要,因为向量有方向。如果你颠倒这两项,船就会远离目标。
velocity += steering_vector * drag_factor
我们将这个转向矢量的一部分添加到第三行的当前速度。它逐渐改变velocity
每一帧,使我们的船根据我们的输入加速和减速。
如果没有drag_factor
,我们会立即将我们设置 velocity
为desired_velocity
,使船始终以最大速度移动或根本不动。
要每帧仅添加一部分转向矢量,请将该值乘以steering_vector
一个小数。0.01
介于和之间的任何地方都0.3
应该运作良好。
值越低,船的惯性就越大:它的转弯、加速和减速都会慢得多。drag_factor
这是一艘船 0.05
。

值越高,船的反应性越强:它会急转弯,迅速达到最大速度,然后瞬间停止。drag_factor
这是以of 移动的船0.3
。

尽管如此,与使用这种转向算法始终以最大速度移动相比,运动总是感觉更顺畅。
练习:让船转向
在 Godot 实践项目中,打开Making the ship steer。
代码
这些转向方程广泛用于专业游戏中。本课程仅展示基本原理,但您将在课程中看到我们可以进一步推动转向行为以编写令人印象深刻的 AI 运动。
这是舵机的完整代码,包括您之前编写的助推机制。
extends Sprite
var boost_speed := 1500.0
var normal_speed := 600.0
var max_speed := normal_speed
var velocity := Vector2.ZERO
var drag_factor := 0.1
func _process(delta: float) -> void:
var direction := Vector2.ZERO
direction.x = Input.get_axis("move_left", "move_right")
direction.y = Input.get_axis("move_up", "move_down")
if direction.length() > 1.0:
direction = direction.normalized()
if Input.is_action_just_pressed("boost"):
max_speed = boost_speed
get_node("Timer").start()
var desired_velocity := max_speed * direction
var steering_vector := desired_velocity - velocity
velocity += steering_vector * drag_factor
position += velocity * delta
rotation = velocity.angle()
func _on_Timer_timeout() -> void:
max_speed = normal_speed
到太空和遥远的群星!结束
如果您完成了所有四个练习,恭喜您!您击败了第一个项目,并正在成为游戏开发者的路上。
在下一个项目 Dialog Boxes 中,您将编写一个漂亮的小对话框系统。那将是一个了解字典力量的好机会。
将输入映射添加到您的游戏
您的玩家可能希望使用键盘或游戏手柄来玩您的游戏。通常,您需要支持多种输入设备。
例如,您可能希望Dkey、→key 和 joystick 都使角色向右移动。
Godot 的Input Map为您解决了这个问题:它将一个
名称映射到多个键和按钮。访问输入映射
要管理您的Input Map,请转到Project -> Project Settings…窗口,然后单击Input Map 选项卡。

Input Map窗口顶部有一个栏,用于添加新的输入名称以及现有名称和相应输入的列表。

在那里,您可以在浅灰色背景上看到每个现有操作的名称。在每个名称下方,您会找到相应输入的列表。
当玩家按下这些输入中的任何一个时,Godot 将触发相应的动作,允许您在代码中对其做出反应。
所有以ui_开头的动作都是由 Godot 编辑器预定义和使用的。
您可以在编写游戏的用户界面或插件时使用它们。但是,我们建议为游戏的其余部分创建新的输入操作,以避免在与游戏的 UI 交互时发生冲突。
创建动作
要定义新操作,请单击Action旁边的栏。您键入操作的名称,例如move_right,然后按下Enter或单击“添加”按钮。

然后您的新操作会出现在窗口底部。

要将键或按钮映射到此操作,请单击其右侧的加号图标。

您会看到四个选项:
Physical Key和Key选项适用于键盘按键。
Joy Button选项适用于游戏手柄上的按钮。
操纵轴选项代表任何操纵杆。
鼠标按钮控制鼠标。在 的情况下 Left Click,它还默认与触摸设备兼容。

钥匙和物理钥匙有什么区别?
世界各地的玩家使用不同的键盘布局。
例如,英语国家有QWERTY键盘,但在法国最常见的布局是AZERTY。
当试图映射到键盘上的特定字母时,比如 WASD在第一人称游戏中移动,法国玩家最终会遇到不方便的布局。对于他们来说,键的布局不像箭头键,这将要求他们在玩游戏之前更改输入设置。
这就是 Godot 引入物理密钥选项的原因。它不是映射到给定的字母,而是记录键在键盘上的位置。例如,如果您在QWERTY键盘上记录您的物理键,Godot 会将其保存为“第一个字母行的第二个字母”。W
这使得键的位置 WASD在键盘布局中保持一致。
如果您想使用字母键进行移动,我们建议您使用它。
奖励:方向向量
https://www.bilibili.com/video/BV1zu411Y7mF/?p=6
这段简短的附赠视频应该可以帮助您直观地了解我们所说的 方向向量的含义。
简而言之,它通常是一个最大长度为 的向量 1.0
,我们用它来表示玩家或实体的移动方向。您可以将它乘以速度值来计算 速度。
场景、节点、脚本和信号
这些是 Godot 游戏所依赖的四个基本概念:场景、节点、脚本和信号。
我们已经在我们的第一个项目中看到了它们的实际应用。
本指南将帮助您更多地理解这些概念。您可以随时返回以复习。
Godot 游戏由许多场景组成。场景可以由更小的场景和节点组成。
您游戏的所有场景和节点一起构成了场景树:您的游戏将组织在场景树中。当我们从事更大的项目时,您会了解更多。
现在,场景和节点没有脚本就做不了多少。脚本是包含附加到节点的代码的文件。代码在您将脚本链接到的节点上执行。
最后,您可以使用信号让脚本对游戏世界中的事件做出反应 。信号是节点在发生特定事件时发出的消息,例如计时器用完。
Godot 游戏由场景组成
在 Godot 中,您会将游戏分解为多个场景。
场景可以是游戏中任何有意义的东西,例如角色、武器、门、房子或整个游戏关卡。

场景可以是任意大小和复杂程度。在设计场景时,我们专注于为游戏制作单一的东西,比如角色或菜单。如果我们需要二十个节点来这样做,我们就使用二十个节点。如果我们只需要三个,我们就用三个。

您可以嵌套场景
假设您有几个场景:一个房间、一个传送器和一个箱子。你可以通过将它们组合成一个新场景来制作一个可玩的关卡场景,就像你在课程介绍中所做的那样。

您可以根据需要多次复制场景。例如,您的宝箱场景是制作新宝箱的蓝图。
我们称您游戏中的每个箱子为实例:场景的具体再现。在整个课程中,您将了解有关创建实例的更多信息。
节点是您最小的构建块
要创建场景,您需要小型构建块。在 Godot 中,我们称它们为节点。
节点就像乐高积木。它们是游戏的基本构造块。Godot 提供了其中的几十个。这里有四个例子:
该
节点显示图像并允许您移动、旋转和缩放它。AudioStreamPlayer2D
可以播放声音或音乐配乐。检测另一个区域或物理体何时接触它。
倒计时并在每次超时时发出信号。
节点为您提供制作游戏所需的所有基本功能。例如,您可以检测到玩家何时靠近箱子并尝试使用
. 您还可以使用它们来了解角色何时受到打击并且应该失去健康。请注意某些节点如何具有“2D”后缀。Godot支持2D和3D游戏,很多节点都有2D和3D版本。后缀和图标的颜色区分它们。
就其本身而言,节点通常不执行任何操作。它们是 Godot 为您提供的代码库的一部分 。要使节点栩栩如生,您需要将脚本附加到它们。
脚本
脚本是包含附加到 Godot 节点的代码的文件。
我们在本课程中专门使用 GDScript 代码,但Godot为有需要的经验丰富的游戏开发人员支持多种编程语言。
最好将脚本想象成附在兼容主机上并控制它们的寄生虫。
每个节点都带有一个代码库,默认情况下不会做太多事情。此代码正在等待您使用它。为此,您需要在脚本中编写说明。
您的脚本通常以extends
关键字开头,后跟节点类型。
您在第一行所写的内容限制了兼容节点。例如,以以下代码开头的脚本仅与精灵和从精灵派生的节点兼容。
extends Sprite
关键字extends
的意思是“此脚本扩展了该节点类型的代码”,使您的脚本可以访问 Godot 开发人员为该节点编码的所有函数和变量。
例如,每个start()
启动计时器的功能。要在 节点上使用此功能,您必须:
创建一个
节点。将脚本附加到
以 code 开头的节点extends Timer
。
信号
你可以只用节点和脚本做很多事情,但你很快就会遇到问题。想象一颗子弹飞向怪物。您想准确知道子弹何时接触到怪物并在那一刻减去生命值。
为了解决这个问题,Godot 有一个名为signals的特性。它们是您可以收听的消息,可以准确地告诉您事件发生的时间。
例如,在给船升压时,我们
在项目中启动一个。我们想知道计时器何时超时并降低船速。为此,我们连接到timeout
信号。当 结束时,它发出信号。
我们将信号连接到函数。当timeout
信号发出时,Godot 调用连接的函数并运行它的代码,这就是我们对信号做出反应的方式。
总之
信号、脚本、节点和场景。他们一起工作来帮助你制作游戏:
您连接信号和脚本以对游戏世界中的事件做出反应。
您将脚本附加到节点以控制节点。
您创建多个节点并将其组合到场景中。
你所有的场景都汇集到一个游戏中。
请注意,这些概念是 Godot 特有的,因为每个游戏引擎的工作方式都不同。
您不会在其他游戏引擎中找到节点本身。但是,您会发现精灵、声音播放器、区域等。他们只是工作方式不同。