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