如何通过工具脚本/编辑器插件与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
相关产品推荐
相关产品推荐

