【问题标题】:How to call a variable from a preload script in godot?如何从godot中的预加载脚本调用变量?
【发布时间】:2021-04-19 10:55:57
【问题描述】:

当我在 godot 中制作一个预加载脚本并将变量放入其中时,我如何在其他脚本中调用该变量?

有没有一种特殊的方法来调用我不知道的变量,或者有比预加载脚本更好的方法吗?

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    如果您正在预加载脚本,例如const item = preload("res://scripts/item.gd") 它充当一种类型。也就是说,您可以将变量声明为它,并创建它的实例。脚本上声明的变量存在于其实例中:

    const Item = preload("res://scripts/item.gd")
    var my_item:Item
    
    func _ready():
        my_item = Item.new()
        print(my_item.variable)
    

    Custom variable typesClasses and nodes顺便说一句,不,Godot 中没有静态变量,请参阅Keywords 表上的“静态”。

    您可能正在预加载场景而不是脚本。在这种情况下,您会收到 PackedScene,适用类似规则。但是你会使用instance 方法。

    我建议不要这样做,而是给你的脚本一个class_name。 Godot 会识别它并使其随处可用。见Register scripts as classes


    请注意,这与访问场景树中另一个节点上定义的变量不同。如果您尝试访问场景树中另一个节点的脚本中定义的变量,请使用get_node 或类似方式访问该节点,然后您可以访问该节点上的变量。见Understanding node paths


    如果你需要一个全局变量,你想要的是一个 "singleton" autoload。您可以在项目设置的“自动加载”选项卡中设置场景以自动加载(选择场景路径,为其命名,然后单击“添加”)。无论场景如何,它们都将在场景树上可用。 他们坚持场景的变化。

    由于自动加载在场景树上,您可以使用get_node 来访问它们。路径将 "/root/" 后跟您给它的名称。例如:

    onready var global_variables = get_node("/root/GlobalVariables")
    
    func _ready():
        print(global_variables.variable)
    

    【讨论】:

      【解决方案2】:

      如果您想从 1 个或多个不同的脚本访问一个脚本,使用预加载脚本不是一个好方法。 (至少在我看来)
      我更喜欢在项目中创建一个全局脚本,并且可以从其他脚本和节点访问该脚本。
      现在该怎么做?

      1. 打开一个新的或首选的场景。

      2. 在顶部菜单的项目滚动下,单击项目设置。

      3. 在项目设置上,单击自动加载选项卡,然后从游戏中的每个脚本中添加您想要访问的脚本,当然还要为其添加一个精细的节点名称。

      4. 现在基于该节点名称,您可以访问该全局脚本中的任何内容。

      例如,如果这是我将其自动加载为 全局 节点名称的全局脚本:

      extends Node
      
      var num: int = 5
      

      我可以从其他脚本访问 num 变量,例如:

      Global.num = 6
      

      请务必查看AutoLoad Documentation 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-05
        • 2015-09-16
        • 1970-01-01
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多