在Godot中编写场景脚本

本文概述

  • 场景设定
  • 添加脚本
  • 脚本的作用
  • 处理信号
我们将建立一个包含按钮和标签的GUI场景, 按此按钮将更新标签。它将演示:
  • 编写脚本并将其附加到任何节点。
  • 我们正在通过信号连接UI元素。
  • 我们正在编写一个可以访问视图中其他节点的脚本。
在继续之前, 请确保阅读GDScript参考。它是一种设计简单的语言, 并且文本简短, 因此概述概念所需的时间不会超过几分钟。
场景设定 使用” 场景” 选项卡(或按ctrl + A)访问的” 添加子节点” 对话框来创建具有给定节点的层次结构:
  • 面板
    • 标签
    • 纽扣
场景树如下所示:
在Godot中编写场景脚本

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

文章图片
最后, 我们必须使用诸如sayhello.tscn之类的名称保存场景。
添加脚本 【在Godot中编写场景脚本】右键单击面板节点, 然后从上下文菜单中选择” 附加脚本” :
在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()。此函数使用路径在相对于脚本拥有的节点的任何位置获取节点。
为了方便起见, 请删除展开面板下方的所有内容。我们将手动填充其余脚本。
由于面板底部的按钮和标签是附加脚本的兄弟姐妹, 因此我们已经可以通过在_()函数下面键入来调用按钮:
GDScriptfunc _ready():get_node("Button")Next, write a function which is called when the button is pressed:GDScriptfunc _on_Button_pressed():get_node("Label").text = "HELLO!"Lastly, connect the button's "pressed" signal to _ready() by using Object.connect().GDScriptfunc _ready():get_node("Button").connect("pressed", self, "_on_Button_pressed")The final script should look like this:GDScriptextends Panelfunc _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数组参数启用它, 该参数默认为空。随意阅读该对象。连接方法以获取更多信息。

    推荐阅读