如何修复Grid Tilemap以适配特定区域(附脚本与图片)
Godot 4.2.2 TileMap与网格适配调整方案
基础信息
- Godot版本:4.2.2
- 场景结构:根节点Node2D,子节点包括GridDraw(自定义绘制网格)和TileMap(承载瓦片)
- 核心设置:竖屏视口576×1024,瓦片/网格单元格尺寸64px
问题核心
当前通过脚本手动绘制网格和填充瓦片,需要调整为TileMap与网格精准适配特定区域,达到预期场景效果。
具体调整步骤
1. 弃用自定义GridDraw,改用TileMap自带网格
TileMap本身自带网格显示功能,完全能替代自定义绘制,还能保证和瓦片100%对齐:
- 选中TileMap节点,在Inspector面板找到「Visible」分类,勾选「Grid Visible」
- 到「Grid」分类里,直接设置网格的颜色、线宽(可以改成你之前用的卡其色/印第安红)
- 删除GridDraw节点和对应的
grid_draw.gd脚本,避免双重网格冲突
2. 校准TileMap网格原点与视口对齐
之前自定义网格加了32px的偏移(64/2),现在要让TileMap的网格跟上这个偏移:
- 选中TileMap,在Inspector的「Grid」分类中,设置「Offset」为
Vector2(32, 32) - 确认「Cell Size」是
Vector2(64, 64),和瓦片尺寸保持一致
3. 修正瓦片填充脚本的区域逻辑
原来的脚本用local_to_map计算范围容易偏移,改成精准的坐标计算,同时补全循环范围避免漏填:
修改后的tilemap_grid.gd:
extends Node2D const LAYER = 1; # ground层 var terrain_set_id = 0; var terrain_id = 0; var viewport_size: Vector2; enum Tilesets { Terrains, Objects } @onready var tile_map: TileMap = $TileMap; func _ready() → void: viewport_size = get_viewport().get_size(); # 计算视口对应的完整TileMap坐标范围(匹配之前的偏移) var start_cell = tile_map.local_to_map(Vector2(-32, -32)) var end_cell = tile_map.local_to_map(viewport_size + Vector2(32, 32)) # 填充水域 fill_area_with_tile( start_cell, end_cell, Tilesets.Terrains, Vector2i(0,12) ); # 填充基础岛屿地形 fill_area_with_terrain_connected( Vector2i(1,6), Vector2i(8,13), LAYER, terrain_set_id, terrain_id ); func fill_area_with_tile(start: Vector2i, end: Vector2i, tileset_id: int, tile_coords: Vector2i, layer: int = 0) → void: # 循环范围包含end_cell的坐标,避免漏填边缘 for x in range(start.x, end.x + 1): for y in range(start.y, end.y + 1): tile_map.set_cell(layer, Vector2i(x,y), tileset_id, tile_coords ); func fill_area_with_terrain_connected(start: Vector2i, end: Vector2i, layer: int, terrain_set_id: int, terrain_id: int) → void: for x in range(start.x, end.x + 1): for y in range(start.y, end.y + 1): tile_map.set_cells_terrain_connect(layer, [Vector2i(x,y)], terrain_set_id, terrain_id)
说明:
- 调整了起始单元格的计算,确保覆盖视口外的偏移区域,避免边缘瓦片截断
- 循环范围改成
end.x+1和end.y+1,确保所有目标单元格都被填充 - 移除了脚本里没用的冗余变量
4. 验证适配效果
运行场景后检查:
- TileMap的网格线和瓦片完全对齐
- 水域、岛屿区域准确覆盖预期范围
- 视口边缘没有瓦片截断或网格偏移的问题
内容的提问来源于stack exchange,提问作者Rafael de Castro
相关产品推荐
相关产品推荐

