You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot中如何获取另一个场景中的节点?

Godot 跨场景获取并存储节点引用的实现方案

首先明确前提:get_node() 只能检索到当前已经挂载到场景树中的节点,未实例化、未加入场景树的场景节点无法直接通过路径获取,可根据使用场景选择以下方案:

  • 方案1:使用全局自动加载单例存储引用(最稳定推荐)

适合需要跨多个场景频繁访问的公共节点
操作步骤:

  1. 新建全局脚本,例如命名为 Global.gd,提前定义用于存储节点的变量:
# Global.gd 内容
var player: CharacterBody2D
var game_ui: Control
  1. 进入「项目设置-自动加载」页签,将Global.gd添加到自动加载列表并启用,该脚本会作为全局单例全程存在于场景树中。
  2. 在对应节点所属场景的_ready()生命周期中,将自身引用赋值给全局变量:
# 玩家节点所属脚本的内容
func _ready():
    Global.player = self
  1. 任意场景都可以直接调用Global.player访问该节点,无需重复执行get_node查找。
    注意节点销毁时要清空引用避免野指针报错:
func _exit_tree():
    if Global.player == self:
        Global.player = null
  • 方案2:动态实例化场景时直接存储引用

适合你手动加载并挂载其他场景的场景
当你在当前脚本中动态实例化外部场景时,直接把返回的实例存在变量中即可直接调用:

var boss_scene = preload("res://scenes/Boss.tscn")
# 实例化后存储引用
var current_boss = boss_scene.instantiate()
add_child(current_boss)
# 后续直接使用存储的变量调用节点方法
current_boss.take_damage(10)
  • 方案3:通过场景树绝对路径访问已挂载节点

仅适合两个场景均已加入当前场景树的临时场景使用
如果目标节点已经在场景树中,可以用根路径/root/开头的绝对路径查找:

# 假设场景树结构为 Root -> MainUI -> ScoreLabel
var score_label = get_node("/root/MainUI/ScoreLabel")

注意:该方法强依赖场景树层级结构,后续调整节点位置会直接导致路径失效,不建议在核心逻辑中使用

内容的提问来源于stack exchange,提问作者T-Rex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:45:00