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

如何通过工具脚本/编辑器插件与Tilemap Editor交互?

解决Godot 4自定义Tile选择Dock插件的实现问题

核心实现方案

直接修改编辑器设置项无法切换Tilemap工具,需通过模拟编辑器动作、调用Tilemap编辑器内部API来实现需求,具体步骤如下:


1. 切换到Tilemap Editor面板

通过编辑器接口的set_current_screen方法,直接切换到底部的Tilemap编辑器面板:

# 获取编辑器接口实例
var editor_interface = get_editor_interface()
# 切换至Tilemap编辑器面板
editor_interface.set_current_screen("TileMap")

2. 激活画笔工具

不能直接通过set_setting修改工具状态,需触发编辑器的动作映射来切换画笔工具:

# 触发Tilemap画笔工具对应的动作
get_editor_interface().get_action_map().trigger("tile_map_editor/paint_tile")

注:动作名称可在编辑器设置的「输入映射」中确认,Tilemap画笔工具的动作名就是tile_map_editor/paint_tile

3. 选中指定瓦片

通过编辑器接口获取TilemapEditor实例,调用其内部方法设置选中瓦片:

# 获取TilemapEditor插件实例
var tilemap_editor = get_editor_interface().get_editor_plugin("TileMapEditor")
if tilemap_editor:
    # 传入你的Dock中选中的TileSet和目标瓦片ID
    tilemap_editor.call("set_selected_tile", target_tileset, target_tile_id)

注:若直接调用set_selected_tile失败,可参考Godot源码中TileMapEditor的公开方法列表,调整调用的接口名称

4. 完整点击事件示例

在你的Dock面板中,瓦片图像的点击事件逻辑可参考:

func _on_tile_clicked(tile_id: int, tileset: TileSet):
    var editor_interface = get_editor_interface()
    
    # 切换到Tilemap面板
    editor_interface.set_current_screen("TileMap")
    
    # 激活画笔工具
    editor_interface.get_action_map().trigger("tile_map_editor/paint_tile")
    
    # 设置选中瓦片
    var tilemap_editor = editor_interface.get_editor_plugin("TileMapEditor")
    if tilemap_editor:
        tilemap_editor.call("set_selected_tile", tileset, tile_id)

额外注意事项

  • 若部分内部方法未暴露给GDScript,可尝试通过TileMap节点的属性间接设置选中瓦片
  • 在插件初始化时检查TileMapEditor是否加载:
func _enter_tree():
    if not get_editor_interface().has_editor_plugin("TileMapEditor"):
        push_warning("TileMapEditor插件未加载,自定义瓦片选择功能无法使用")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:50:37