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

Godot 4中@tool脚本@export布尔值无法在编辑器切换的求助

Godot 4中@tool+@export布尔变量无法在编辑器切换的解决方法

问题描述

在Godot 4中使用@tool和@export实现编辑器向脚本传参时,代码逻辑可以正常执行,但编辑器面板里的布尔变量开关无法正常切换状态。

原代码如下:

@tool
extends Sprite2D

@export var show_sprites = false:
    set(show):
        if show:
            _renderSprites()
        else:
            _clearSprites()

编辑器面板状态:
编辑器中布尔开关无法切换

临时解决方法存在的问题:使用整数作为导出变量时,设置非零值能触发显示精灵,但参数不会更新为输入的数值(始终保持0);点击参数重置按钮会触发_clearSprites()函数。

解决方法

核心问题是自定义setter中未更新变量本身的值,导致编辑器无法同步变量状态。正确写法需要在setter里先给变量赋值,再执行业务逻辑:

@tool
extends Sprite2D

@export var show_sprites = false:
    set(show):
        # 先同步变量值,确保编辑器UI状态正确
        show_sprites = show
        if show:
            _renderSprites()
        else:
            _clearSprites()

原理说明

原代码的setter仅执行了显示/清除精灵的逻辑,但没有将新值赋值给show_sprites变量。Godot编辑器的属性面板依赖变量的实际值同步UI状态,缺失赋值步骤会导致编辑器无法感知变量变化,开关也就无法正常切换。

关于官方文档的核心内容翻译:在编辑器内运行@tool脚本时,必须保证自定义属性的setter维护变量本身的赋值,否则属性面板无法正确反映当前变量值。这也是你用整数作为导出变量时参数无法更新的原因——同样没有给变量赋值,编辑器只能保留初始值;重置按钮触发逻辑是因为重置操作会将变量设回初始值,进而触发setter里的清除逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:20:09