微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从godot中的预加载脚本调用变量?

如何解决如何从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 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)
,

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

  1. 打开一个新的或喜欢的场景。

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

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

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

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

extends Node

var num: int = 5

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

Global.num = 6

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。