个性化阅读
专注于IT技术分析

在Godot中编写场景脚本

本文概述

我们将建立一个包含按钮和标签的GUI场景, 按此按钮将更新标签。它将演示:

  • 编写脚本并将其附加到任何节点。
  • 我们正在通过信号连接UI元素。
  • 我们正在编写一个可以访问视图中其他节点的脚本。

在继续之前, 请确保阅读GDScript参考。它是一种设计简单的语言, 并且文本简短, 因此概述概念所需的时间不会超过几分钟。

场景设定

使用”场景”选项卡(或按ctrl + A)访问的”添加子节点”对话框来创建具有给定节点的层次结构:

  • 面板
    • 标签
    • 纽扣

场景树如下所示:

Godot中的脚本场景

使用2D编辑器调整按钮和标签的大小和位置, 使其看起来像下面的图像。我们可以从检查器选项卡设置文本。

Godot中的脚本场景

最后, 我们必须使用诸如sayhello.tscn之类的名称保存场景。

添加脚本

右键单击面板节点, 然后从上下文菜单中选择”附加脚本”:

Godot中的脚本场景

脚本创建对话框将弹出。此对话框使我们可以设置类名称, 脚本语言和其他适用的选项。

在GDScript中, 该文件表示类本身, 因此类名称字段不可编辑。

我们与脚本关联的节点是一个面板, 因此旧版字段将自动填充”面板”。这就是我们想要的, 因为脚本的目的是扩展面板节点的功能。

最后, 输入脚本的路径名, 然后选择创建。

Godot中的脚本场景

将创建脚本并将其添加到节点。我们可以在”场景”选项卡中的节点旁边以及检查器下方的”脚本”选项卡属性中看到类似” OpenScript”图标的图标:

Godot中的脚本场景

要编辑任何脚本, 请选择这两个按钮中的任何一个, 这些按钮在上图中突出显示。这将带我们到脚本编辑器, 其中可以包含默认模板:

Godot中的脚本场景

当节点及其子节点进入活动场景时, 将调用_ready()函数。

注意:-ready()不是构造函数, 而是_init()。

脚本的作用

脚本将行为添加到节点。它用于控制节点的工作方式以及与其他节点(子代, 父母, 兄弟姐妹等)的交互方式。脚本的本地区域是节点。换句话说, 脚本节点提供的功能是继承的。

Godot中的脚本场景

处理信号

当某种特定类型的动作发生时, 信号被”发出”, 并且它们可以与任何实例的任何功能相关联。信号主要用于GUI节点, 尽管其他节点也有信号, 我们也可以在脚本中定义自定义信号。

在此步骤中, 我们将”抑制”信号连接到自定义功能。创建连接是第一部分, 定义自定义功能是第一部分的第二部分。 Godot提供了两种建立链接的方式:通过可视界面, 通过编辑器商品或代码。

在本系列教程的其余部分中使用代码方法时, 让我们介绍一下编辑器界面的工作方式, 以备将来参考。

在视图树中选择按钮节点, 然后选择”节点”选项卡。接下来, 确保我们选择了”信号”。

Godot中的脚本场景

如果然后在” BaseButton”下选择” pressed()”并单击右下角的” Connect ..”按钮, 将打开连接创建对话框。

Godot中的脚本场景

左下方是创建连接所需的关键内容:一个实现我们要触发的方法的节点(在此表示为NodePath)以及触发方式的名称。

左上部分显示场景节点的列表, 并以红色突出显示发射节点的名称。在此处选择”面板”节点。

当我们选择一个节点时, 底部的节点路径将自动更新, 以指示从释放节点到所选节点的相对路径。

默认情况下, 该方法包含发射节点的名称(在这种情况下为”按钮”), 结果为” _on_ [EmitterNode] _ [signal_name]”。如果我们确实选中了” Make function”复选框, 那么编辑器将为我们建立连接建立函数。

并总结了有关如何使用可视界面的指南。但是, 这是一个脚本教程, 因此, 为了学习, 让我们深入研究手动过程!

完成此操作后, 我们将介绍Godot程序员最常用的函数:Node.get_node()。此函数使用路径在相对于脚本拥有的节点的任何位置获取节点。

为了方便起见, 请删除展开面板下方的所有内容。我们将手动填充其余脚本。

由于面板底部的按钮和标签是附加脚本的兄弟姐妹, 因此我们已经可以通过在_()函数下面键入来调用按钮:

GDScript
func _ready():
    get_node("Button")

Next, write a function which is called when the button is pressed:
GDScript
func _on_Button_pressed():
    get_node("Label").text = "HELLO!"

Lastly, connect the button's "pressed" signal to _ready() by using Object.connect().
GDScript
func _ready():
    get_node("Button").connect("pressed", self, "_on_Button_pressed")

The final script should look like this:
GDScript
extends Panel

func _ready():
    get_node("Button").connect("pressed", self, "_on_Button_pressed")

func _on_Button_pressed():
    get_node("Label").text = "HELLO!"

运行场景并按按钮。我们应该得到以下结果:

Godot中的脚本场景

为什么在那里!恭喜你编写了第一个场景脚本。

注意:关于本教程的一个常见误解是get_node(PATH)的工作方式。对于节点, get_node(PATH)搜索其直接子节点。在上面的代码中, 这意味着该按钮必须是Panel的子级。如果该开关是该标签的子代, 则获取该代码的代码将是;

GDScript
# Not for this case, # but in case.
get_node("Label/Button")

另外, 请记住, 节点是通过名称而不是类型来引用的。

注意:”连接”对话框的右侧面板用于将特定值绑定到所连接功能的参数。我们可以添加和删除许多类型的值。代码方法还使用4A数组参数启用它, 该参数默认为空。随意阅读该对象。连接方法以获取更多信息。


赞(0)
未经允许不得转载:srcmini » 在Godot中编写场景脚本

评论 抢沙发

评论前必须登录!