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

代码配置TileSet后TileMap调用set_cell不显示tiles问题排查

问题:代码创建TileSetAtlasSource后Tile无法显示,编辑器手动配置正常

我通过代码创建TileSetAtlasSource:

var atlas_source = TileSetAtlasSource.new()
atlas_source.texture = atlas_texture  # Tileset image with all the tiles in it
tileset.add_source(atlas_source, 0)  # Adding it to the TileSet with ID 0

随后遍历tiles并创建以供后续使用:

for y in atlas_size.y:
    for x in atlas_size.x:
        atlas.create_tile(Vector2i(x, y))

但调用set_cell方法验证时:

for x in 16:
    for y in 16:
        TileMap.set_cell(0, Vector2i(x, y), 0, Vector2i(x, y))  # Layer 0, then coordinates on TileMap, then source ID (which is 0), and lastly tile coords

tiles无法显示,不过图集纹理本身显示正常。手动通过编辑器配置时所有tiles均可正常显示,请问问题出在哪里?

解决方案

问题出在三个容易忽略的细节上,对应修正如下:

1. 未设置TileSetAtlasSource的单块Tile尺寸

手动配置时编辑器会要求设置Tile大小,但代码里必须显式指定,否则Atlas无法正确切割图集。在添加source到tileset前,加入:

# 替换为你实际的Tile宽高,比如32x32
atlas_source.tile_size = Vector2i(32, 32)

2. 创建Tile的对象引用错误

代码中atlas.create_tile(...)的atlas变量未定义,应该使用你创建的atlas_source对象:

for y in atlas_size.y:
    for x in atlas_size.x:
        atlas_source.create_tile(Vector2i(x, y))

3. 未将配置好的TileSet关联到TileMap

你创建并配置了tileset,但没有把它赋值给目标TileMap组件,导致TileMap不知道使用哪个图集。添加:

# 确保TileMap是正确的节点引用,比如用$TileMap获取场景中的节点
$TileMap.tile_set = tileset

修正后的完整代码示例:

var tileset = TileSet.new()
var atlas_source = TileSetAtlasSource.new()
atlas_source.texture = atlas_texture
# 设置Tile尺寸
atlas_source.tile_size = Vector2i(32, 32)
tileset.add_source(atlas_source, 0)

# 遍历创建Tile
for y in atlas_size.y:
    for x in atlas_size.x:
        atlas_source.create_tile(Vector2i(x, y))

# 关联TileSet到TileMap
$TileMap.tile_set = tileset

# 验证设置Cell
for x in 16:
    for y in 16:
        $TileMap.set_cell(0, Vector2i(x, y), 0, Vector2i(x, y))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:48:31