2Dゲームの地面や壁、洞窟、街並み——これらを1枚ずつスプライトで並べるのは大変です。そこで使うのが タイルマップ 。小さなタイル(絵)を格子状に敷き詰めて、広いマップを効率よく作る仕組みです。
Godot 4.3以降では、この主役が TileMapLayer ノードになりました。この記事では、TileMapLayerと TileSet の関係から、タイルに 当たり判定 を付ける方法、地面と装飾を 複数レイヤー に分けるコツ、そして スクリプトからタイルを配置 する方法まで、基礎をひととおり解説します。
この記事 でわかること
- TileMapLayer と TileSet の関係(地図と絵の具箱)
- タイルに 当たり判定 を付ける(物理レイヤー)
- 地面・装飾を 複数のTileMapLayer に分ける
set_cellで スクリプトからタイルを配置 する
TileMapLayerとTileSet:地図と絵の具箱
タイルマップは、2つの部品でできています。 TileSet と TileMapLayer です。役割がはっきり分かれているので、まずここを押さえましょう。

- TileSet(絵の具箱) :「どんなタイルがあるか」を定義する リソース です。タイル画像を格子で切り分け、1マスずつを「使えるタイル」として登録します。
- TileMapLayer(地図) :「そのタイルをどこに敷くか」を担う ノード です。パレットからタイルを選び、格子の上をなぞって配置します。
作る手順はシンプルです。シーンに TileMapLayer ノードを追加し、インスペクタの「Tile Set」から新しいTileSetを作成、タイル画像を登録します。あとはエディタ下部のTileMapパネルで、タイルを選んでマップに描いていくだけです。
補足: Godot 4.3で、旧
TileMapノードはTileMapLayerに置き換えられ非推奨 になりました。ノード作成時はTileMapLayerを選びます。1つのTileSetは複数のTileMapLayerで共有できるので、絵の具箱は1つ、地図は何枚でも、という使い方ができます。
タイルに当たり判定を付ける
床の上をプレイヤーが歩き、壁で止まる——この 当たり判定 は、タイル1枚ずつに持たせます。付け方は「TileSetに物理レイヤーを追加し、各タイルに衝突の形を描く」だけです。

- TileSetエディタの「Physics Layers(物理レイヤー)」を1つ追加する
- 各タイルを選び、そのタイルに コリジョンポリゴン(衝突の形) を描く
これだけで、そのタイルが敷かれた場所すべてに 自動で当たり判定 が生まれます。何百枚の床タイルを置いても、当たり判定を1つずつ設定する必要はありません。タイル側に一度描けば、あとは敷くだけです。プレイヤー(CharacterBody2D)は、この当たり判定に乗って歩けるようになります(2D物理ボディの使い分け 参照)。
複数のTileMapLayerでレイヤー分け
マップは1枚のTileMapLayerだけでも作れますが、 役割ごとにノードを分ける と管理がぐっと楽になります。Godot 4.3では1つの TileMapLayer が1つのレイヤーなので、地面・装飾などを別々のノードにします。

Level (Node2D)
├── Background (TileMapLayer) # 背景(空・遠景)
├── Ground (TileMapLayer) # 地面・壁(当たり判定つき)
└── Decoration (TileMapLayer) # 草・小物(地面の上に重ねる)
- 描画順(重なり) :ツリーで 下にあるノードほど手前 に描かれます。地面の上に草を重ねたいなら、
DecorationをGroundより下に置きます。 - 役割の分離 :当たり判定は
Groundだけに持たせ、Decoration(草や看板)は当たり判定なしにする、といった分け方ができます。「当たる地面」と「飾りだけの装飾」を混ぜないのがコツです。
物理レイヤーとTileMapLayerは別物 です。「物理レイヤー」はTileSet内でタイルに当たり判定を持たせる設定、「TileMapLayer(ノード)」はマップの1枚を担うノードです。名前が似ていますが、前者はタイルの性質、後者は地図の重なり、と役割が違います。
実践:スクリプトでタイルを配置する
タイルはエディタで手描きするだけでなく、 コードから動的に配置 できます。ローグライクの自動生成ダンジョン、サンドボックスの地形破壊、シミュレーションの地形生成——「マップをルールで作る」ジャンルで活躍します。

鍵になるのが set_cell() です。「この座標に、TileSetのこのタイルを置く」と指定します。ここで出てくる source_id と atlas_coords は、 「どのタイル画像の、何列目・何行目のタイルか」 を指す番地です。

extends TileMapLayer
func _ready() -> void:
# 座標(3, 5)に、source_id=0・アトラス座標(2, 0)のタイルを置く
set_cell(Vector2i(3, 5), 0, Vector2i(2, 0))
# 10x10の床をまとめて敷く
for x in 10:
for y in 10:
set_cell(Vector2i(x, y), 0, Vector2i(1, 1))
# 座標(3, 5)のタイルを消す
erase_cell(Vector2i(3, 5))
ポイントは2つです。
set_cellはレイヤー引数が不要 :TileMapLayerは1ノード=1レイヤーなので、set_cell(座標, source_id, atlas座標)と書きます。旧TileMapのset_cell(layer, ...)とは違うので、古い記事のコードには注意してください。消すときはerase_cell(座標)です。- 生成アルゴリズムは「どの座標を何にするか」だけ :ランダムウォークやセルオートマトンなどで「床にする座標」を決め、あとは
set_cellで敷くだけ。境界タイルの自動接続まで欲しくなったら、Terrains(オートタイル) のset_cells_terrain_connect()が次の一手です。
おまけ:先に知っておくと良いこと
- 境界タイルを自動で選ばせたい :草と土の境目などを1枚ずつ選ぶのは大変です。Terrains(オートタイル) を使うと、地形を塗るだけでエンジンが境界タイルを自動配置してくれます。この記事の基礎ができたら、次はこちらへ。
- マップの上を敵に歩かせたい :タイルマップから経路探索用のメッシュを作れます。NavigationRegion2Dとナビゲーションメッシュ が入口です。
- 広いマップはカメラでスクロール :画面より大きいマップは Camera2D で追従・スクロールさせて見せます。
まとめ
- TileSet は「どんなタイルがあるか」の絵の具箱、TileMapLayer は「どこに敷くか」の地図。1つのTileSetを複数レイヤーで共有できる
- Godot 4.3以降は
TileMapLayerを使う(旧TileMapは非推奨) - 当たり判定 はTileSetの物理レイヤーで各タイルに持たせる。敷けば自動で判定が 付く
- 地面・装飾は 別のTileMapLayer に分け、下のノードほど手前に描画される
set_cell(座標, source_id, atlas座標)でスクリプトからタイルを配置できる(レイヤー引数なし)
まずは床タイルに物理レイヤーを付け、その上をプレイヤーが歩けるところまで作ってみてください。タイルマップは、2Dゲームのステージ作りの土台になります。
さらに学ぶために
- Terrains機能でオートタイルを設定する ——境界タイルを自動配置する次のステップ
- NavigationRegion2Dとナビゲーションメッシュ ——タイルマップ上の経路探索
- Camera2D実践テクニック集 ——広いマップをスクロールで見せる
- Godot公式ドキュメント:Using TileMaps ——タイルマップの一次情報