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

求助:Godot自动加载GD脚本变量值无法正确同步的问题

Godot自动加载脚本调用变量值不一致问题

将一段GD脚本设置为自动加载后,遇到以下问题:在另一个脚本中调用Morton.morton_statetest始终返回0;同时在Morton脚本和调用它的脚本中分别添加打印语句后,两者输出的变量值完全不一致,但终端没有任何错误提示。

相关代码如下:

extends AnimatedSprite2D

var morton_statetest := 0
var rng := RandomNumberGenerator.new()
var running := false
var morton_hall_trigered := false
@onready var morton_hall_spr := self
var animatronic := "morton"
var morton_position := 99

func _process(_delta: float) -> void: #SUPER SPAGUETTI
    if morton_statetest == 0:
        morton_position = 99
    elif morton_statetest == 1:
        morton_position = 6
    elif morton_statetest == 2:
        morton_position = 7
    elif morton_statetest == 3:
        morton_position = 4
    elif morton_statetest == 4:
        morton_position = 5
    elif morton_statetest == 5:
        morton_position = 0


func _on_morton_timer_movement_timeout() -> void:
    if morton_statetest <= 4 && Global.alive == true:
        var numero_aleatorio_morton = rng.randi_range(1, 21)
        if numero_aleatorio_morton < Global.dificulty_morton:
            get_node("/root/Night 1/Camera2D/Ui/Estatica_spr").modulate.a = 1
            morton_statetest += 1
            print("morton state: ", morton_statetest)
            print("morton position: ", morton_position)
            await get_tree().create_timer(0.5).timeout
            get_node("/root/Night 1/Camera2D/Ui/Estatica_spr").modulate.a = 0.2

问题分析与解决方法

  • 核心原因:多实例冲突
    你的Morton脚本继承自AnimatedSprite2D(节点类型),设置为自动加载后,Godot会在/root下生成一个全局实例;但如果你的场景中还放置了另一个Morton节点,就会出现两个独立的实例。你在定时器回调中修改的是场景实例的morton_statetest,而另一个脚本调用的是自动加载的全局实例的变量,自然值不一致。

  • 具体排查与修复步骤

    1. 检查自动加载配置:打开项目设置→自动加载,确认Morton脚本的加载路径,全局实例的路径通常是/root/[你的脚本名]。
    2. 确认操作的是同一个实例:
      • 在_on_morton_timer_movement_timeout函数中添加print(self.get_path()),查看当前修改变量的实例路径,判断是不是全局实例。
      • 在调用morton_statetest的脚本中,不要直接用Morton.morton_statetest,而是通过get_node("/root/Morton").morton_statetest明确访问全局实例的变量(替换成你的自动加载实例实际路径)。
    3. 清理冗余实例:如果场景中的Morton节点是多余的,直接删除;如果需要保留,要明确区分全局实例和场景实例的调用方式。
    4. 补充:morton_position是在_process中实时更新的,修改morton_statetest后立即打印morton_position会得到旧值,需要等待下一帧再打印,不过这不是导致跨脚本值不一致的主因。

内容的提问来源于stack exchange,提问作者Withoutsleep_dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 01:40:15