Godot 使用图块集 (Using TileSets) 教程

前言

图块地图 (TileMap) 是一种以图块为单位的网格,用来制作游戏场景。使用 TileMapLayer 节点设计关卡有几个优点。首先,你可以直接在网格上“涂画”图块,比起一个一个放置 Sprite2D 节点效率高很多。其次,图块地图针对大量图块绘制做过优化,可用于更大规模的场景。最后,你还可以为图块加上碰撞、遮蔽与导览等功能。

要使用 TileMapLayer 节点,你需要先建立一个 TileSet。 一组 TileSet 是可以放在 TileMapLayer 节点上的图块集合。建立 TileSet 后,你就可以透过 TileMap 编辑器 来使用它们。

依照本教学操作时,你需要准备一张包含多个图块、且每个图块大小相同的图片(大型物件可以切分成多个图块)。这种图片称作 图块表 (tilesheet)。图块不一定要是正方形,矩形、六角形,甚至等轴(类 3D 视角)都可以。

建立 TileSet

使用图块表

本教学使用来自 Kenney“Abstract Platformer”美术包的图块。完整资源包可于 这里 取得,范例仅使用其中部分图块表。

64×64 图块表。作者:Kenney

新增一个 TileMapLayer 节点,然后在属性面板中建立新的 TileSet 资源:

在 TileMapLayer 节点内建立新的 TileSet 资源

建立 TileSet 资源后,点击该属性值可在属性面板展开相关设定。预设图块形状为“正方形”,也可根据图块图像选择“等轴”、“半偏移正方形”或“六边形”。若使用非方形图块,可能还需调整 Tile Layout**(图块排列)与 **Tile Offset Axis**(图块偏移轴)。最后,如果希望依据图块座标裁切图块,可启用 **Rendering > UV Clipping,避免图块绘制超出台块表分配区域。

在属性面板将图块大小设为 64×64,以符合范例图块表:

将图块大小设为 64×64 以符合范例图块表

如果要使用自动建立图块(如本教学范例), 必须先 设定图块大小,然后再建立 图块集(atlas) 。图块集会根据设定的大小,决定哪些区块能加入 TileMapLayer(并非图片每个区块都会生成图块)。

打开编辑器下方的 TileSet 面板,将图块表图像直接拖曳到面板上。系统会询问是否自动建立图块,请选择 是:

依据图块表图像内容自动建立图块

这会根据你在 TileSet 资源指定的图块大小,自动建立所有图块,大大加快初期设定流程。

备注

使用自动产生图块时,图块表中*完全*透明的区域将不会建立图块。

如果有不希望出现在图块集中的图块,可以在图块预览区上方选择橡皮擦工具,点击欲删除的图块:

用橡皮擦工具从 TileSet 合集中移除不需要的图块

也可以直接按右键选择 删除 来移除图块,无需使用橡皮擦工具。

小诀窍

和 2D 及 TileMap 编辑器一样,可以用鼠标中键或右键平移 TileSet 面板,用鼠标滚轮或左上角按钮缩放预览。

若要将多张图块表中的图块纳入同一个 TileSet,请先建立多个图块集(atlas)并分别指定材质。虽然也能每个图块都用独立图档,但建议还是使用图块表以方便管理。

你可以在中间字段调整图块集(atlas)的属性:

在 TileSet 面板的专属属性面板调整图块集属性

图块集支援下列属性调整:

  • ID: 此图块集内唯一的识别码,用于排序。

  • 名称: 图块集的自订名称,建议用于描述用途(例:地形、装饰等)。

  • 边界: 图块表边缘不作为图块的像素宽度。若你的图块表有边界(如标示作者),可适当增加此值。

  • 间隔: 每个图块之间的像素距离。若图块表每格间有辅助线或间隔,请适当设定此值。

  • 纹理区域大小: 每个图块的像素尺寸。通常建议与 TileMapLayer 设定的图块大小一致(但不是强制)。

  • 使用纹理边界: 勾选后会在每个图块四周加 1 像素透明边,避免开启过滤时出现纹理渗色。建议预设启用,除非边界导致算绘问题。

请注意,调整纹理边界、间隔及区域大小可能导致部分图块无法正确分割。若需要重新自动产生图块,可在 TileSet 编辑器顶部的“三点选单”下选择 在非透明纹理区域建立图块。

变更图块集属性后自动重新产生图块

使用场景集合

自 Godot 4.0 起,你可以将实际的 场景 作为图块放置。这表示你可以将任意节点集合用作图块。例如,场景图块可以用来放置游戏要素,像是玩家可以互动的商店,也能用于放置 AudioStreamPlayer2D(环境音效)、粒子特效等。

警告

场景图块比图集图块有更高的效能负担,因为每个放置的图块都会个别产生一个场景实例。

建议仅在必要时才使用场景图块。如果只需要在图块中绘制精灵且不需进阶操作,请改用图集。

本范例会先建立一个以 CPUParticles2D 为根节点的场景,将它存档(与包含 TileMapLayer 的场景分开存),然后切换回包含 TileMapLayer 的场景。打开 TileSet 编辑器,在左侧栏新增一个 场景集合:

在 TileSet 编辑器中建立场景集合

建立场景集合后,你可以在中间字段输入描述名称。选择该场景集合,再新增一个场景槽:

在 TileSet 编辑器中选取场景集合后建立场景图块

在右侧栏选择这个场景槽,然后点击 快速载入**(或 **载入)来载入含粒子的场景档案:

在 TileSet 编辑器新增场景槽后,载入场景档案

此时你的 TileSet 已有一个场景图块。切换到 TileMap 编辑器后,就能从场景集合中选用并像其他图块一样绘制它。

将多个图集合并成单一图集

在同一个 TileSet 资源中用多个图集有时很方便,但某些情况下(例如每个图块用一张图)会变得很难管理。Godot 提供了将多个图集合并为单一图集的功能,让整理更容易。

要执行此操作,你必须在 TileSet 资源里先建立至少两个图集。然后在图集列表下方点选“三个垂直点”功能表,选择 开启图集合并工具:

在建立多个图集后开启图集合并工具

这会开启一个对话视窗,你可以按住 Shift 或 Ctrl 键点击多个图集来选取:

使用图集合并工具对话视窗

选择 合并 会把选取的图集合并成一个图集(即 TileSet 内只剩一个图集)。未合并的图集会从 TileSet 中移除,但*原始图集影像仍会保留在档案系统*。如果不想移除未合并的图集,请选择 合并(保留原图集)。

小诀窍

TileSet 有*图块代理*系统。图块代理是一个对应表,用来通知 TileMap(使用该 TileSet)将指定的一组图块识别码替换为另一组。

合并不同图集时会自动设定图块代理,也可以透过上述“三个垂直点”选单开启的 管理图块代理 视窗来手动设定。

当你变更图集 ID 或想用某个图集的所有图块取代另一个图集时,手动建立图块代理就很有用。编辑 TileMap 时,也可将所有格子替换为对应的代理值。

向 TileSet 新增碰撞、导览和遮挡

我们现在已经成功建立了一个基本的图块集。我们现在可以在 TileMapLayer 节点中使用它了,但它目前缺乏任何形式的碰撞侦测。这表示玩家及其他物件会直接穿过地板或墙壁。

如果使用 2D 导览,还需要为图块定义导览多边形,以生成导览网格,供代理用于寻路。

最后,如果你使用 2D 灯光和阴影 或 GPUParticles2D,你可能还希望 TileSet 能够投射阴影并与粒子碰撞。这就需要为 TileSet 上的 “实体” 图块定义遮挡多边形。

若要能够定义每个图块的碰撞、导航和遮挡形状,您首先需要为图块集资源建立一个物理、导航或遮挡图层。若要这么做,请选取 TileMapLayer 节点,在属性检视器中按一下图块集属性值进行编辑,然后展开 物理图层 并选择 新增元素:

在图块集资源属性检视器中建立物理图层 (于 TileMapLayer 节点内)

如果你还需要导览辅助,可以建立导览层:

在 TileSet 资源属性检视器 (在 TileMapLayer 节点内部) 中建立导航图层

如果你需要支援光照多边形遮挡器,可以建立遮挡层:

在 TileMapLayer 节点内的图块集资源属性检视器中建立遮挡图层

备注

本教学的后续步骤专门用于建立碰撞多边形,但导览和遮挡的步骤非常相似。它们各自的多边形编辑器行为方式相同,因此为简洁起见不再重复这些步骤。

唯一需要注意的是,图块的遮挡多边形属性是合集属性检视器中 算绘 分节的一部分。请确保展开该部分,以便编辑多边形。

建立实体层后,你可以存取 TileSet 合集属性检视器中的 实体层 部分:

在选择模式下打开碰撞编辑器

你可以在聚焦 TileSet 编辑器时按 F 快速建立矩形碰撞形状。如果键盘快捷键不起作用,请尝试按一下多边形编辑器周围的空白区域使其聚焦:

按 F 键使用预设矩形碰撞形状

在这个图块碰撞编辑器中,你可以使用所有二维多边形编辑工具:

  • 使用多边形上方的工具列可在建立新多边形、编辑现有多边形和删除多边形上的点之间切换。“三个竖点”功能表按钮提供了其他选项,例如旋转和翻转多边形。

  • 通过按一下并拖动两点之间的直线来建立新点。

  • 按右键一个点(或使用上述移除工具并左键按一下)将其移除。

  • 通过中键或右键在编辑器中平移。(右键平移只能用于附近没有点的区域)

你可以使用预设的矩形形状,通过移除其中一个点来快速建立三角形碰撞形状:

通过按右键其中一个角将其移除来建立三角形碰撞形状

你还可以通过新增更多点,将矩形用作更复杂形状的基础:

为复杂图块形状绘制自订碰撞

小诀窍

如果你有一个大的图块集,为每个图块单独指定碰撞可能会花费很多时间。尤其是在 TileMaps 中往往有许多具有常见碰撞模式(如实心块或 45 度斜坡)的图块。要快速将类似的碰撞形状应用到多个图块,请使用 一次为多个图块指定属性 的功能。

为 TileSet 的图块分配自订中继资料

你可以使用*自订资料层*来为各个图块分配自订资料。可以用来储存游戏过程中所需的特定资讯,例如玩家接触该图块时应该受到的伤害,以及是否能够使用物理将图块摧毁。

资料是在 TileSet 中与图块进行关联的:放置的所有图块使用的都是相同的自订资料。如果你需要建立拥有不同自订资料的变体图块,可以通过 建立备选图块 并为该备选图块更改自订资料来实作。

在 TileSet 资源属性检视器中建立自订资料图层 (在 TileMapLayer 节点内)

针对游戏中的特定属性配置自订资料层的范例

改变自订资料的顺序不会损坏现有的中继资料:TileSet 编辑器会在自订资料属性的顺序发生改变后自动进行更新。

使用上面显示的自订资料图层范例,我们正在指派一个图块,使其具有设定为 25 的 damage_per_second 中继资料,以及设定为 false 的 destructible 中继资料:

TileSet 编辑器的“选择”模式下编辑自订资料

自订资料也可以进行 图块属性的绘制:

在 TileSet 编辑器中使用图块属性绘制来分配自订资料

建立内容

备注

这个功能和 Godot 3.x 中的*自动图块*使用了不同的实作方式。地形系统能够完全替代自动图块,功能也更强大。与自动图块不同,地形系统支援不同地形之间的过渡,这样就可以为同一个图定义多个地形。

与以前不同的是,自动图块是一种特定型别的图块,而地形只是分配给合集图块的一组属性。使用专门的 TileMap 绘制模式时就会用到这些属性,该模式能够对带有地形资料的图块进行智慧选择。这意味着地形图块既可以作为地形绘制,也可以像其他图块一样作为单个图块绘制。

“完善”的图块集中通常会包含很多变体图块,适用于平台、地板等位置的角落和边缘。这种图块虽然可以手动放置,但是很快就会感觉非常麻烦。在程序式生成的关卡中如果要处理这种情况也很困难,需要编写大量的代码。

Godot 提供 地形 以自动执行这类型的图块连接。这让您可以自动使用“正确的”图块变体。

地形按照地形集群组。地形集有固定的模式,包括 Match Corners and Sides 、 Match Corners 、 Match sides (配对角落和边缘、配对角落、配对边缘)。模式决定了地形集中的地形如何相互配对。

备注

上述模式在 Godot 3.x 中对应的自动图块位元遮罩模式为 2×2、3×3或3×3 Minimal。也和 Tiled 编辑器中使用的模式类似。

选取 TileMapLayer 节点,前往属性检视器并在图块集 资源 中建立一个新的地形集:

在图块集资源属性检视器中建立地形集 (在 TileMapLayer 节点内)

建立地形集后,你**必须**在地形集*中*再建立若干地形:

产生金钥储存区

在 TileSet 编辑器中,切换到“选择”模式并按一下图块。在中间一栏展开**地形**部分,为图块分配地形集 ID 和地形 ID。-1 表示“没有地形集”和“没有地形”,因此你必须先将**地形集**设定为大于等于 0 的值,然后才能将**地形**设定为大于 0 的值。

备注

地形集 ID 和地形 ID 互相独立。从 0 开始,不从 1 开始。

在 TileSet 编辑器的“选择”模式中配置单个图块的地形

完成此操作后,你现在可以配置 地形对等位元 部分,该部分在中间一列中可见。对等位元决定了根据相邻图块的情况放置哪个图块。“-1”是一个特殊值,指的是空位。

例如,如果一个地砖的所有位都设定为 0 或更大,那么只有在 所有 8个相邻图块都使用具有相同地形 ID 的图块时,它才会出现。如果图块的位设定为“0”或更大,但左上、上和右上的位设定为“-1”,则只有在其顶部(包括对角线)有空位时才会出现。

在图块集编辑器的选择模式下配置单个图块上的地形对等位

完整图块表的配置范例如下:

横向磁盘区轴游戏的完整图块表范例

一个横向磁盘区轴的完整图块表范例,带可见地形对等位

一次为多个图块指定属性

有两种方法可以同时为多个图块分配属性。根据你的使用情况,一种方法可能比另一种方法更快:

使用多个图块选择

如果您希望同时在多个图块上设定各种属性,请在图块集编辑器顶部选择 选取 模式:

完成此操作后,你可以按住 Shift 键,然后按一下图块,在右侧栏中选择多个图块。你还可以按住鼠标左键然后拖动鼠标来执行矩形选择。最后,你可以按住 Shift 然后按一下选定的图块,取消选择已选中的图块(不会影响选择的其他部分)。

然后,你可以使用 TileSet 编辑器中间一列的属性检视器分配属性。只有在此更改的属性才会应用到所有选定的图块。与编辑器的属性检视器一样,在你编辑之前,所选图块上的不同属性将保持不同。

对于数值和颜色属性,编辑完成后还能在合集中的所有图块上看到属性值的预览:

使用选择模式选择多个图块,然后应用属性

使用汇出样板

如果要一次将单个属性应用于多个图块,则可以使用*属性绘制*模式来实作此目的。

在中间一列配置要绘制的属性,然后点击右列中的图块(或按住鼠标左键)以将属性“绘制”到图块上。

使用图块集编辑器绘制图块属性

对于手动设定耗时的属性(例如碰撞形状),图块属性绘制特别有用:

绘制碰撞多边形,然后左键按一下图块以应用它

建立内容

有时,你想使用单一的图块图像(在合集中只能找到一次),但要以不同的方式进行配置。例如,你可能想使用相同的图块图像,但对它进行旋转、翻转或调变成不同的颜色。这就可以使用 备选图块 来实作。

小诀窍

从 Godot 4.2 开始,你不需要再特地建立备用图块来旋转或翻转图块。直接在 TileMap 编辑器中放置图块时,可以透过工具列上的旋转/翻转按钮来调整。

要建立备选图块,请按右键 TileSet 编辑器显示的合集中的基本图块,然后选择 建立备选图块:

在 TileSet 编辑器中按右键基础图块建立替代图块

如果目前处于“选择”模式,则可编辑已选中的备选图块。如果目前不在“选择”模式下,你仍然可以建立备选图块,但需要切换到“选择”模式并选择备选图块进行编辑。

如果看不到备选图块,请平移到合集图像的右侧,因为在 TileSet 编辑器中,备选图块总是出现在给定合集基础图块的右侧:

在 TileSet 编辑器中按一下替代图块后配置它

选择备选图块后,你可以使用中间一列更改任何属性,就像在基础图块上一样。但暴露的属性列表与基础图块不同:

  • 备用 ID: 此可选图块的唯一数位识别码符。更改它会破坏现有的瓦片地图,所以要小心!此 ID 还控制在编辑器中显示的可选图块列表中的排序。

  • Rendering > Flip H: 如果为``true``,则图块水平翻转。

  • Rendering > Flip V: 如果为``true``,则磁贴垂直翻转。

  • Rendering > Transpose:**若设为 ``true``,图块会先逆时针旋转 90 度,再垂直翻转。实际应用上,若要将图块顺时针旋转 90 度但不翻转,请同时启用 **Flip H 及 Transpose。若要顺时针旋转 180 度,请启用 Flip H 和 Flip V。若要顺时针旋转 270 度,请启用 Flip V 及 Transpose。

  • Rendering > Texture Origin: 绘制图块时使用的原点。可以用来将图块进行相对于基础图块的视觉偏移。

  • Rendering > Modulate: 绘制图块时的颜色乘数。

  • Rendering > Material: 此图块使用的材质。可用来对单一图块套用不同的混合模式或自订着色器。

  • Z Index: 此图块的排序顺序。数值越高,图块会显示在同一层的其他图块之上。

  • Y Sort Origin: 基于 Y 座标(像素)进行图块排序时所使用的垂直偏移。这让你在制作俯视角游戏时,可以模拟不同高度的图层。调整这个值有助于解决某些图块排序的问题。仅当 TileMapLayer 节点下 CanvasItem > Ordering 的 Y Sort Enabled 为 true 时有效

你可以点击备选图块旁的大型“+”图示,建立新的备选图块。这等同于选取基本图块后按右键,再选择“建立备选图块”。

备注

建立备选图块时,不会继承基本图块的任何属性。如果你希望备选图块与基本图块有相同属性,必须重新在备选图块上设定。

本文转载自 Godot Engine 官方文档 (繁体中文 4.5),原文:使用图块集 (Using TileSets)。版权归原作者所有,本文整理仅供学习参考,如有侵权请联系删除。


Godot 使用图块集 (Using TileSets) 教程
https://www.youxihun.top/archives/godot-using-tilesets
作者
闻君
发布于
2026年08月28日
许可协议