问题描述
当我在 godot 中创建一个预加载脚本并在其中放置一个变量时,我如何在其他脚本中调用该变量?
是否有一种特殊的方法可以调用我不知道的变量,或者是否有比预加载脚本更好的方法?
解决方法
如果您要预加载脚本,例如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 types 和 Classes 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)
,
如果您想访问一个或多个不同脚本中的一个脚本,使用预加载脚本不是一个好方法。 (至少在我看来)
我更喜欢在项目中创建一个全局脚本,并且可以从其他脚本和节点访问该脚本。
现在该怎么做?
-
打开一个新的或喜欢的场景。
-
现在基于该节点名称,您可以访问该全局脚本中的任何内容。
例如,如果这是我将其自动加载为全局节点名称的全局脚本:
extends Node
var num: int = 5
我可以从其他所有脚本访问 num 变量,例如:
Global.num = 6
请务必查看 AutoLoad Documentation 以了解更多信息。