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
相关产品推荐
相关产品推荐

