如何在Godot 4.2.1中利用TileSheet的XML文件构建等距Tilemap?
在Godot 4.2.1中使用Kenney不等尺寸等距Tile构建Tilemap
一、提取XML中的Tile精确信息
Kenney提供的XML文件标注了每个Tile在SpriteSheet上的x/y坐标、width/height尺寸及名称,你可以用两种方式获取这些参数:
- 手动提取:用记事本打开XML文件,逐个记录每个Tile的参数,适合Tile数量较少的场景。
- 脚本批量解析:写一段GDScript自动读取XML,适合批量操作,示例代码如下:
extends Node func _ready(): var xml_parser = XMLParser.new() var error = xml_parser.open("res://path/to/your/tilesheet.xml") if error != OK: print("XML文件打开失败") return while xml_parser.read() == OK: if xml_parser.get_node_name() == "SubTexture": var tile_name = xml_parser.get_attribute_value("name") var x = int(xml_parser.get_attribute_value("x")) var y = int(xml_parser.get_attribute_value("y")) var width = int(xml_parser.get_attribute_value("width")) var height = int(xml_parser.get_attribute_value("height")) # 可将参数存入数组,或直接用于创建Tile print(tile_name, ": ", x, ",", y, " | ", width, "x", height) xml_parser.close()
二、创建并配置TileSet
- 在Godot中新建
TileSet资源,导入你的Kenney等距TileSheet纹理。 - 手动添加Tile:
- 打开TileSet编辑器,点击左上角「Add Single Tile」按钮。
- 在纹理视图中,根据XML里的
x/y/width/height框选对应Tile区域。 - 关键设置:将Tile的原点(Anchor)设为底部中心(即
(width/2, height)),否则摆放时会错位。 - 重复操作添加所有Tile,可按名称分组方便管理。
- 脚本批量添加(可选):
- 基于上述XML解析脚本,扩展代码直接在TileSet中创建Tile:
var tile_set = load("res://your_tileset.tres") var texture = load("res://your_tilesheet.png") # 解析到每个SubTexture时执行: var tile_id = tile_set.create_tile() tile_set.tile_set_texture(tile_id, texture) tile_set.tile_set_region(tile_id, Rect2(x, y, width, height)) tile_set.tile_set_offset(tile_id, Vector2(width/2, height)) # 设置底部中心原点 tile_set.tile_set_name(tile_id, tile_name)
- 基于上述XML解析脚本,扩展代码直接在TileSet中创建Tile:
三、配置TileMap并构建场景
- 场景中添加
TileMap节点,将创建好的TileSet赋值给它的「Tile Set」属性。 - 将TileMap的「Tile Map Mode」改为Isometric(等距模式)。
- 调整「Cell Size」:等距Tile的单元格尺寸通常设为Tile基础尺寸的一半,比如多数Tile为128x64时,Cell Size设为
(64, 32),Tile会自动按等距网格排列。 - 现在即可在TileMap编辑器中选择不同Tile,在网格上摆放构建场景。
注意事项
- 因Tile尺寸不同,大建筑类Tile可能需要占据多个单元格,可在TileSet中设置Tile的「Cell Coverage」适配。
- 若出现Tile错位,优先检查Tile原点是否为底部中心,以及TileMap的Cell Size是否匹配Tile比例。
内容的提问来源于stack exchange,提问作者user23783268
相关产品推荐
相关产品推荐

