gpt4 book ai didi

godot - 不知道如何将其他场景引用到脚本中

转载 作者:行者123 更新时间:2023-12-04 17:21:55 30 4
gpt4 key购买 nike

我无法将 SliceAndCoagulatorScene 链接到脚本以将其可见设置为 false 我已尝试 get_node$res://...

extends Node2D

onready var main_scene = get_node(".")
onready var SliceAndCoagulatorScene = get_node("_________")



func _ready():

main_scene.visible = true

这是我想放在后面的内容:

SliceAndCoagulatorScene.visible = false

我该怎么做,感谢任何帮助

最佳答案

为清楚起见:场景树中不存在 res:// 路径,它存在于虚拟文件系统中。因此,您无法从 get_node 访问它。因为get_node作用于场景树,所以需要先在场景树中加载并实例化场景。

如果你已经在编辑器中将场景添加到场景树中,那么它会加载它并为你实例化它,并且会有一个路径你可以放在 get_node 中......但是它不会是 res:// 路径,因为虚拟文件系统中同样存在 res:// 路径。

您将 res:// 路径提供给 load(或 load_interactive,参见 Background loadingchange_scene),而不是 get_node

现在,您要尝试定位已加载或未加载的场景。


如果你的其他场景没有加载,你需要加载它(loadload_interactive),这会给你一个 PackedScene,实例化它(instance) 给你一个Node。在这一点上你有一个引用,继续使用它。您可能想要添加到场景树(例如 add_child)。

例如,这里我们将新场景附加到根(这可能是也可能不是你想要的,特别是面对不断变化的场景,但这是另一个话题):

func _ready():
var packed_scene = load("res://something.tscn")
var scene_node = packed_scene.instance()
var root = get_tree().get_root()
root.add_child(scene_node)
scene_node.visible = false # or whatever

我建议使用 PackedScene 导出:

export(PackedScene) var packed_scene
onready var scene_node = load(packed_scene).instance()

func _ready():
var root = get_tree().get_root()
root.add_child(scene_node)
scene_node.visible = false # or whatever

然后在检查器面板中,您将看到一个新属性“Packed Scene”(Godot 自动将名称大写),您可以在其中指定来自文件系统的场景。另外,如果您在编辑器的文件系统中移动场景,编辑器会为您更新路径。

注意:您可能想也可能不想将它们添加到 get_tree().get_root()。其他选项包括将其添加到 get_tree().get_current_scene()get_owner()get_parent()self.


另一方面,您的两个场景都已加载到场景树中。在这种情况下,存在从一个节点到另一个节点的路径,您可以将其放入 get_node。如果您的目标场景不是 child ,您可能希望使用 .. 提升几个级别。但是,我建议不要硬编码这样的路径。

相反,您将充分利用以下方面:

export(NodePath) var target_scene
onready var scene_node = get_node(target_scene)

然后在检查器面板中,您将看到一个新属性“目标场景”,您可以在其中指定要访问的节点在场景树中的位置。另外,如果您在编辑器中移动场景树中的节点,它会为您更新路径。

然后你可以这样做:

func _ready():
scene_node.visible = false # or whatever

注意:如果不知道场景是否加载。您可能对使用 find_node 感兴趣。 Control 还提供了一个 get_node_or_null

关于godot - 不知道如何将其他场景引用到脚本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65660219/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com