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

如何让Godot编辑器显示脚本(如_ready函数)生成的动态内容?

让Godot脚本动态内容在编辑器中显示

要让你的调色板组件在编辑器里渲染出动态生成的按钮,核心是用Godot的@tool脚本功能,让脚本代码在编辑器环境中执行。具体修改步骤如下:

1. 添加@tool注解

在脚本最开头加上@tool,这会让脚本在编辑器和运行时都执行:

@tool
extends Node2D

2. 优化节点生成逻辑(避免重复创建)

原代码的_ready只执行一次,编辑器中修改colors数组后不会更新按钮。我们需要监听属性变化,每次colors修改时清空旧按钮并重新生成:

修改后的完整代码:

@tool
extends Node2D

@export var colors:Array[Color] = []:
    set(value):
        colors = value
        update_palette()

signal color_selected(color:Color)

func _ready():
    update_palette()

func update_palette():
    # 清空现有按钮
    for child in get_children():
        if child is TextureButton:
            child.queue_free()
    
    var x = 0
    var size = 100
    # 编辑器中建议用preload确保资源加载稳定
    var white_texture = preload("res://white_pixel.png")
    for clr in colors:
        var btn = TextureButton.new()
        btn.size = Vector2(size, size)
        btn.texture_normal = white_texture
        btn.stretch_mode = TextureButton.STRETCH_SCALE
        btn.modulate = clr
        btn.position = Vector2(x, 0)
        # 编辑器中避免触发运行时的信号逻辑
        if not Engine.is_editor_hint():
            btn.connect("button_down", color_clicked.bind(btn))
        add_child(btn)
        x += size

func color_clicked(btn:TextureButton):
    emit_signal("color_selected", btn.modulate)

关键说明

  • @tool:让脚本在编辑器中运行,所有节点创建、属性修改逻辑都会实时反映到编辑器视图中。
  • @export var colors的set回调:当你在检查器中修改颜色数组时,会自动触发update_palette(),清空旧按钮并重新生成新的颜色按钮。
  • Engine.is_editor_hint():判断当前是否在编辑器环境,避免编辑器中触发按钮点击的信号逻辑(编辑器中点击按钮无需发送color_selected信号)。
  • preload替代load:编辑器中preload比load更稳定,确保资源能正确加载。

注意事项

  • 确保white_pixel.png路径正确,否则编辑器中会显示缺失纹理的按钮。
  • @tool脚本的错误会直接影响编辑器运行,调试时要注意避免逻辑错误导致编辑器崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:40:08