节点和术语

在继续之前,必须注意 Node 需要小心使用术语。当提到 可视化脚本节点 (或一般而言) 结点 )本文将引用与线条连接的小方框,这些线条是图形的一部分。当提到 场景节点 ,表示正在引用构成场景的元素,这些元素是树的一部分。它们的命名相似,但功能不同。当提到 Node 在这里,它将意味着 可视化脚本节点 除非另有说明。

../../../_images/visual_script16.png

节点属性

与大多数可视化脚本实现一样,每个节点都有可编辑的属性。不过,在godot中,为了可读性,我们尽量避免使用可编辑控件来膨胀节点。

节点仍将所需信息显示为文本,但编辑是通过 检查员 . 要编辑它们,请选择任意节点并在 检查员 .

端口和连接

在Godot可视化脚本中的编程是通过 结点端口连接 在每个函数中。

端口

Godot可视化脚本中的节点具有 端口 . 这些端点出现在节点的左侧和右侧,可用于 连接 :有两种类型 端口序列Data .

../../../_images/visual_script17.png

顺序端口 指示执行操作的顺序。通常当 Node 完成处理后,它将从右侧的一个端口转到下一个节点。如果没有连接任何东西,功能可能会结束,或者另一个输出 顺序端口 可能会尝试(这取决于节点)。因此,您可以通过遵循白线来遵循函数内的逻辑流。不是每一个 Node顺序端口 . 事实上,大多数人没有。

数据端口 端口包含类型化值。类型可以是任何常规的godot类型,例如布尔型、整数、字符串、向量3、数组、任何对象或场景节点等。 数据端口 在节点的右侧被视为输出,而左侧的端口则被视为输入。连接它们允许信息流到下一个节点。

不是全部 数据端口 但是,类型是兼容的,并且允许连接。请特别注意颜色和图标,因为每种类型都有不同的表示:

../../../_images/visual_script18.png

连接

连接是一个相对简单的过程。拖动 输出端口 朝向 输入端口 .

../../../_images/visual_script_connect.gif

断开需要更多的练习。断开连接 数据端口 通过拖动 输入 离开,而为 顺序端口 ,这是通过拖动 产量 离开。

../../../_images/visual_script_disconnect.gif

一开始这似乎很奇怪,但它的发生是因为 数据端口 是1:N(一个输出端口可以连接多个输入),而 顺序端口 为n:1(多个序列输出可连接到单个输入)。

连接到空空间(通过拖动连接,但在空空间上不准备)也是上下文相关的,它将提供最常见的操作列表。对于序列,它将是条件节点:

../../../_images/visual_script52.png

而对于数据,将打开上下文集/获取/调用菜单:

../../../_images/visual_script53.png

添加节点

最后!我们到了有趣的地方!但是,在更详细地解释每种类型的节点所做的工作之前,让我们先简单地看看节点通常是如何添加和处理的。

访问场景节点

最常见的任务之一是访问场景树节点(同样,不要出错 可视化脚本节点 )从场景树中拖动并放到画布中会要求您 调用方法 (有时称为 成员函数 )在这个节点上。

../../../_images/visual_script19.png

在大多数情况下,访问属性是需要的(更多内容见下文),有时 调用方法 也有用。方法对对象执行特定操作。在上面的例子中,鼠标指针可以弯曲到控件的局部坐标中的某个位置。另一个常见的用例是对要删除的节点进行排队,这是通过 queue_free 方法。

../../../_images/visual_script20.png

必须注意,只有当正在编辑的场景包含 可视化脚本 在其中一个节点上!否则,将显示警告。

访问场景节点属性

这是最常用的编辑方式 场景节点 在可视化脚本中。选择 场景节点场景树 去找检查员,找到 名字 要编辑的属性(提示, not 价值!)并将其拖到画布上:

../../../_images/visual_script21.png

结果是,可以通过将该值写入 数据端口 .

如果需要读取该值,请再次拖动节点,但按住 控制 键(或Mac上的命令)。这将创建一个getter:

../../../_images/visual_script22.png

在这种情况下,可以从 数据端口 .

变量

变量是脚本本地的内存容器,可以保存一个值。此值可以通过上一步中描述的方法从脚本的任何函数或其他脚本中读取。

要添加变量,请按 变量 成员小组的一部分。双击新变量将其重命名:

../../../_images/visual_script23.png

右键单击该变量可以配置其属性:

../../../_images/visual_script24.png ../../../_images/visual_script25.png

如上所示,可以更改变量的类型和初始值,以及一些属性提示。勾选“导出”选项可使变量在选择节点时在检查器中可见。这也使其他脚本可以通过上一步中描述的方法使用它。

../../../_images/visual_script28.png

要使用脚本中的变量,只需将其拖到画布上即可创建getter:

../../../_images/visual_script26.png

同样,保持 控制命令 在Mac上)要删除setter:

../../../_images/visual_script27.png

信号

也可以在脚本中创建自己的信号并使用它们。为此,请执行与上一步中对变量执行的相同步骤,除了 信号

../../../_images/visual_script29.png

也可以通过右键单击菜单编辑信号以自定义其参数:

../../../_images/visual_script30.png

您创建的信号将与内置节点信号一起出现在检查器中。这允许您从另一个脚本连接它 场景节点

../../../_images/visual_script31.png

最后,要发出信号,只需将其拖到画布上:

../../../_images/visual_script32.png

记住,发出信号是一个顺序操作,因此它必须来自顺序端口。

添加更多节点

既然已经介绍了基础知识,那么让我们来讨论一下画布上大量可用的实用程序节点!在成员面板下面,存在所有可用节点类型的列表:

../../../_images/visual_script33.png

ctrl-f(mac上的command-f)允许您搜索列表。

它们中的任何一个都可以拖到现场。与节点不同(例如,从检查器中拖动属性会将上下文设置为自动编辑的节点),添加这些属性时不需要任何“上下文”信息,因此必须手动完成。

../../../_images/visual_script34.png

请记住,您可以检查类引用,了解每个节点的作用,因为它们在那里有文档记录。如上所述,节点类型的简要概述如下:

常量

常量节点是提供值的节点,这些值虽然不随时间变化,但可以用作参考值。大多数时候它们是整数或浮点型的。

../../../_images/visual_script36.png

第一个是“常量”,它允许您选择任何类型的值作为常量,从整数(42)到字符串(“hello!”)。通常,由于中的默认输入值,此节点不会经常使用。 数据端口 但很高兴知道它的存在。

第二个是globalinstant节点,它包含godot中全局类型的一长串常量。在这里,您可以找到一些有用的常量来引用键名、操纵杆或鼠标按钮等。

第三个是数学常数,它提供了典型的数学常数,如π、E等。

数据

数据节点处理对信息的各种访问。godot中的任何信息都是通过这些节点访问的,因此它们是最重要的,并且非常多样。

../../../_images/visual_script37.png

这里有许多感兴趣的节点类型,因此下面将简要介绍它们:

行动

当处理来自设备的输入时,动作节点是至关重要的。您可以在(@todo action tute链接)中阅读有关操作的更多信息。在下面的示例中,当按下“右移”操作时,控件右移。

../../../_images/visual_script38.png

引擎单件

引擎单件是全局接口(意味着可以在没有引用的情况下访问它们;与场景节点不同,它们总是可用的)。它们有几个用途,但一般来说,它们对于低级访问或与操作系统相关的访问很有用。

../../../_images/visual_script39.png

请记住,将连接拖到空白空间将有助于调用函数或设置/获取这些函数的属性:

../../../_images/visual_script40.png

局部变量

这些节点可以用作图形的临时存储。使用它们时,请确保它们都具有相同的名称和类型,并且它们将引用相同的内存块。

../../../_images/visual_script41.png

如上所示,有两个节点可用:一个简单的getter和一个已排序的getter(设置需要序列端口)。

场景节点

这只是对树中某个节点的引用,但通过将实际节点从场景树拖到画布上(这将创建并配置该节点),可以更容易地使用该节点。

自我

在某些罕见的情况下,可能需要将此场景节点作为参数传递。它可以用于调用函数和设置/获取属性,或者将节点(或者事件具有脚本的节点本身)从场景树拖到画布上。

SceneTree

此节点类似于singleton节点,因为它引用包含活动场景的scenetree。然而,scenetree只在节点位于场景中并处于活动状态时工作,否则访问它将返回错误。

scenetree允许很多低级的事情,比如设置拉伸选项、调用组、制作计时器,甚至加载另一个场景。这是一个熟悉的好班。

预紧力

这与gdscript中的preload()功能相同。它维护这个已加载并随时可用的资源。将所需的资源从文件系统基座拖到画布上要简单得多,而不是实例化节点。

资源路径

此节点是一个简单的帮助器,用于获取一个字符串,该字符串具有可以选择的资源的路径。它在从磁盘加载东西的函数中很有用。

评论

注释节点充当一个节点,您可以调整大小以放置在其他节点周围。它不会试图获得焦点,也不会在选择时被带到顶端。它还可以用来在上面写文本。

../../../_images/visual_script42.png

流量控制

流控制节点允许执行采用不同的分支,通常取决于给定的条件。

../../../_images/visual_script43.png

条件

这是一个检查bool端口的简单节点。如果为真,它将通过“真”序列端口。如果为假,则为第二个。在选择其中一个之后,它将通过“完成”端口。如果不是所有的序列端口都被使用,那么让它们保持断开状态是可以的。

迭代器

godot中的某些数据类型(即数组、字典)是可重写的。这意味着可以为它拥有的每个元素运行一点代码。

迭代器节点遍历所有元素,对于每个元素,它都通过“每个”序列端口,使元素在“elem”数据端口中可用。

完成后,它将通过“出口”序列端口。

返回

有些函数可以返回值。一般来说,对于虚拟的,godot会为您添加返回节点。返回节点强制函数结束。

序列

此节点主要用于组织图形。它按顺序调用其序列端口。

TypeCast

这是一个有用且常用的节点。可以使用它将参数或其他对象强制转换为所需的类型。然后,您甚至可以拖动对象输出以完全完成。

../../../_images/visual_script55.png

也可以强制转换为脚本,这样可以实现完整的脚本属性和函数:

../../../_images/visual_script54.png

开关

开关节点类似于条件节点,但它同时匹配许多值。

同时

这是一种更原始的迭代形式。”只要“Cond”数据端口中的条件满足,就会调用“重复”序列输出。

功能

函数是简单的助手,大多数时间是确定的。它们接受一些参数作为输入并返回一个输出。它们几乎从未被排序过。

内置

有一个内置助手列表。列表几乎与 GDScript . 它们中的大多数是数学函数,但其他的可以是有用的帮助者。一定要在某个时候看一下这个列表。

按类型

这些是基本类型可用的方法。例如,如果您想要一个点产品,您可以搜索“点”而不是vector3类别。在大多数情况下,只搜索节点列表,它应该更快。

呼叫

这是通用调用节点。它很少直接使用,而是通过拖动到已经配置的节点上的空空间。

施工人员

这些是创建godot基本数据类型所需的所有函数。例如,如果需要创建三个float中的vector3,则必须使用构造函数。

../../../_images/visual_script44.png

析构函数

这与构造函数相反,它允许将任何基本类型(即vector3)分离到其子元素中。

../../../_images/visual_script45.png

发射信号

从任何物体发出信号。一般来说,它没有那么有用,因为将信号拖到画布上效果更好。

获取/设置

通用getter/setter节点。从检查器中拖动属性的效果更好,因为它们在放置时看起来配置正确。

等待

等待节点将暂停函数的执行,直到发生某种情况(实际上,许多帧可以通过,直到恢复)。默认节点允许您等待帧通过、固定帧或给定时间,直到恢复执行。

此节点完全挂起脚本的执行,它将使函数返回一个可用于恢复执行的值。

屈服信号

与Yield相同,但将等待给定信号发出。

索引

通用索引运算符,不经常使用,但它的存在只是为了以防万一。

算子

这些大多是通用运算符,如加法、乘法、比较等。默认情况下,这些运算符大多接受任何数据类型(如果输入的类型与运算符预期的类型不匹配,则在运行时抛出错误)。始终建议为运算符设置正确的类型,以便更快地捕获错误并使图形更易于读取。

../../../_images/visual_script46.png

表达式节点

在运营商中, 表情 节点是最强大的。如果使用得当,它可以极大地简化数学或逻辑重的可视脚本。在上面键入任何表达式,它将被实时执行。

表达式节点可以:

  • 根据自定义输入执行数学和逻辑表达式(例如:“A*5+B”,其中A和B是自定义输入):

../../../_images/visual_script47.png
  • 访问局部变量或属性:

../../../_images/visual_script48.png
  • 使用gdscript可用的大多数现有内置函数,如sin()、cos()、print()以及构造函数,如vector3(x、y、z)、rect2(..)等:

../../../_images/visual_script49.png
  • 调用API函数:

../../../_images/visual_script50.png
  • 使用顺序模式,这在遵守处理顺序的情况下更有意义:

../../../_images/visual_script51.png