2Dマップを作るとき、草地と土の境界、崖の角、道のカーブ——タイルのつなぎ目を1枚ずつ手で選んで並べる作業は、想像以上に骨が折れます。マップを少し描き変えるたびに、周りの境界タイルも全部貼り直し……という経験はないでしょうか。
Godot 4の Terrains(オートタイル) 機能を使えば、この面倒がまるごと消えます。「ここは草」「ここは土」と大まかに塗るだけで、境界に合うタイルをエンジンが自動で選んで並べてくれるのです。この記事では、TileMapLayer ノードの作成から、Terrainsの心臓部である Peering Bits の理解、実際の描画、そしてGDScriptでのプロシージャル生成まで、実際のエディタ画面を追いながら順番に解説します。
この記事でわかること
- オートタイル が何を自動化してくれるのか
TileMapLayerノードとTileSetの準備手順(旧TileMapとの違い)- Terrainsの核心 Peering Bits (3x3の接続ルール)の考え方
- Terrainブラシでの描画と、
set_cells_terrain_connect()による プロシージャル生成
オートタイルは何を自動化するのか
オートタイルが解決するのは、 「境界タイルの選択」 という単調な作業です。
手作業でマップを作る場合、草地の真ん中には「草の中央タイル」、草と土の境目には「左が草・右が土のタイル」、角には「角用のタイル」……と、位置ごとに正しいタイルを自分で選んで置く必要があります。マップを描き変えれば、周囲の境界タイルもやり直しです。
Terrainsを設定しておけば、この判断をエンジンが肩代わりします。あなたは 「この範囲は草」「この範囲は土」と地形を塗るだけ 。隣り合うタイルの組み合わせを見て、エンジンが角・辺・中央の適切なタイルを自動で配置してくれます。

RPGのフィールド、ローグライクのダンジョン、サンドボックスの地形破壊——マップの形が頻繁に変わるゲームほど、この自動化の恩恵は大きくなります。
準備:TileMapLayerとTileSetを用意する
まずはマップを描くための土台を作ります。
ステップ1:TileMapLayerノードを作る
シーンにタイルマップ用のノードを追加します。ノード作成ダイアログで「tilemap」と検索すると、TileMap と TileMapLayer の2つが出てきます。

ここで選ぶのは TileMapLayer です。旧 TileMap ノードは Godot 4.3で非推奨(deprecated) となり、上の画像でも警告マークが付いています。現在は 1レイヤー=1つの TileMapLayer ノード という設計が基本で、地面・装飾・当たり判定などをそれぞれ別の TileMapLayer に分けて管理します。
ステップ2:TileSetを新規作成する
TileMapLayer を選択し、インスペクタの「Tile Set」プロパティから「New TileSet」を選びます。これで、タイルの見た目や当たり判定を定義する TileSetリソース が作られます。

ステップ3:タイルセット画像をアトラスに追加する
作成したTileSetをクリックすると、画面下部にTileSetエディタが開きます。「TileSet」タブで、左下の「+」からアトラスを作成し、使用するタイルセット画像をドラッグ&ドロップで登録します。「Setup」モードで タイルサイズ(Tile Size) を画像のマス目に合わせて設定します(この例では16×16px)。

これでマップを描く準備が整いました。ここからが本題のTerrains設定です。
Terrainsの核心:Peering Bitsを理解する
設定に入る前に、Terrainsの心臓部である Peering Bits(ピアリングビット) の考え方を押さえておきましょう。ここが腑に落ちると、以降の設定作業の意味が一気に分かります。
Peering Bitsとは、各タイルに教え込む 「このタイルは、周りがどの地形のときに使われるべきか」という接続ルール です。1枚1枚のタイルに対して、3x3のグリッドで指定します。

- 中央のマス :このタイル自身がどの地形か(例:草)。
- 周囲の8マス :上下左右と斜めの、隣接タイルがどの地形か。
例えば「中央が草、右と下が土」と塗られたタイルは、 草地の右下の角 に使われるべきタイルだ、とエンジンが理解します。マップを塗ったとき、エンジンは各マスの周囲の状況を見て、 Peering Bitsが一致するタイルを自動で選ぶ のです。
つまりTerrains設定とは、 「どのタイルが、どんな隣接状況で使われるか」を1枚ずつエンジンに教える作業 に他なりません。
モードの選び方
Peering Bitsをどこまで細かく見るかは、Terrain Setの モード で決まります。
| モード | 見る範囲 | 向いているタイルセット |
|---|---|---|
| Match Corners and Sides | 辺と角の両方(8方向) | 角のパターンまで用意された、境界が滑らかなタイルセット |
| Match Corners | 角のみ | 角ベースで組まれたタイルセット |
| Match Sides | 辺のみ(4方向) | 角の接続が不要なシンプルなタイルセット |
最も柔軟なのは Match Corners and Sides です。複雑な境界表現ができる反面、塗るビットも多くなります。まずはこのモードから始めるのがおすすめです。
Terrain SetとPeering Bitsを設定する
概念が分かったところで、実際に設定していきます。
ステップ4:Terrain SetとTerrainを作る
TileMapLayer のインスペクタで、TileSetを展開し「Terrain Sets」に要素を追加します。 Mode を選び(ここでは Match Corners and Sides)、その中の「Terrains」に地形を追加して、 Name と識別用の Color を設定します。この例では「Forest Terrain」という1つの地形を、目立つ色で作っています。

Colorは、次の手順でタイルに塗るときの「筆の色」になります。マップの見た目には影響しないので、他の地形と区別しやすい色を選べば十分です。
ステップ5:Paintモードで各タイルにPeering Bitsを塗る
TileSetエディタで「Paint」モードに切り替え、「Paint Properties」のドロップダウンから Terrains を選びます。

塗りたい地形(Terrain)を選ぶと、その色でタイルに塗れるようになります。ここで、 各タイルの中央と、隣接すべき方向のマスを塗って いきます。これが先ほどのPeering Bitsを1枚ずつ登録する作業です。

タイルセット全体にPeering Bitsを塗り終えると、下の画像のように、地形として登録されたタイルが色でハイライトされます。これでTileSet側の準備は完了です。

Terrainブラシでマップを描画する
いよいよマップを描きます。シーンで TileMapLayer を選択すると、画面下部のTileMapパネルに「Terrains」タブが現れます。

「Terrains」タブを開き、先ほど作った地形(Forest Terrain)を選んで、マップ上をドラッグしてみてください。中央のタイルも、境界のタイルも、角のタイルも——エンジンが Peering Bitsのルールに従って自動で選び分けて 配置してくれます。手作業なら1枚ずつ悩んでいた境界が、なぞるだけで滑らかにつながっていくのが実感できるはずです。
よくある間違いとベストプラクティス
| よくある間違い | ベストプラクティス |
|---|---|
| Peering Bitsの塗り忘れ | すべての境界パターンを網羅して塗る。特に「地形 vs 何もない空間」の境界タイルを忘れがちなので注意します。 |
| 旧TileMapノードを使う | Godot 4.3以降は TileMapLayer を使う。役割ごとにレイヤーノードを分けると管理が楽になります。 |
| 巨大な単一タイルセット | 役割でTileSetを分割する。「地面」「装飾」「衝突用」などに分けると、修正や差し替えがしやすくなります。 |
| すべてを自動配置にしようとする | オートタイルと手動配置を併用する。基本地形はTerrainsで描き、特殊な1枚は手動で置くのが効率的です。 |
Peering Bitsは、塗り忘れがあると「そこだけ変なタイルになる」「境界が欠ける」といった形で表面化します。うまくつながらないときは、まず 該当タイルのPeering Bitsが意図どおりか を疑うのが解決の近道です。
パフォーマンス最適化
TileMapLayer は非常に効率的ですが、数万タイル規模の広大なマップでは、描画コストが無視できなくなります。
- レイヤーの分割 :地面・建物・装飾などを別々の
TileMapLayerノードに分け、更新頻度や役割で整理します。必要なレイヤーだけを操作・非表示にでき、見通しも良くなります。 - 画面外の描画を止める :
VisibleOnScreenEnabler2Dを使うと、対象が画面外に出たときに処理を自動で無効化できます。(旧Godot 3のVisibilityEnabler2DはGodot 4では廃止され、このVisibleOnScreenEnabler2D/VisibleOnScreenNotifier2Dに置き換わっています。) - チャンク(Chunking) :オープンワールドのような巨大マップでは、プレイ ヤー周辺の領域だけを動的に読み込み・破棄する仕組みが有効です。マップを一定サイズのブロックに区切り、近づいたら生成、離れたら解放します。
実践:GDScriptでダンジョンを自動生成する
Terrainsはエディタで手描きするだけの機能ではありません。 GDScriptから呼び出せば、実行時にマップを自動生成 できます。ローグライクの毎回変わるダンジョン、サンドボックスの掘削地形、シミュレーションの地形生成——「決まった見た目のマップを手で描く」のではなく「ルールでマップを作る」ジャンルで威力を発揮します。

鍵になるのが set_cells_terrain_connect() です。「このマスたちを地形◯にして」と 座標の配列を渡すだけ で、境界の接続まで自動でやってくれます。
extends TileMapLayer
const TERRAIN_SET := 0
const FLOOR_TERRAIN := 0 # ステップ4で作った地形のインデック ス
func _ready() -> void:
generate_dungeon()
func generate_dungeon() -> void:
var floor_cells: Array[Vector2i] = []
# ランダムウォークで通路を掘り、床にするマスを集める
var pos := Vector2i.ZERO
for i in 200:
floor_cells.append(pos)
pos += [Vector2i.UP, Vector2i.DOWN, Vector2i.LEFT, Vector2i.RIGHT].pick_random()
# 集めたマスをまとめて地形化。境界タイルはエンジンが自動接続する
set_cells_terrain_connect(floor_cells, TERRAIN_SET, FLOOR_TERRAIN)
ポイントは2つです。
- 配置は「座標を集めてまとめて渡す」だけ :どのタイルを角・辺・中央にするかは一切考えません。
set_cells_terrain_connect()に床にしたいマスの配列を渡せば、Peering Bitsのルールに従って 境界タイルまで自動で選ばれます 。生成アルゴリズム(ランダムウォーク、BSP、セルオートマトンなど)は「どのマスを床にするか」だけに集中できます。 TileMapLayerではレイヤー番号の引数が不要 :旧TileMapのset_cells_terrain_connect(layer, ...)と違い、TileMapLayerは1ノード=1レイヤーなので 先頭のレイヤー引数がありません 。同様にset_cell()やget_cell_source_id()もレイヤー番号なしで呼びます。古い記事のコードを参考にするときは、この違いに注意してください。
個別のタイルを直接操作したいときは set_cell() を使います(こちらは自動接続せず、指定したタイルをそのまま置きます)。
# 座標(10, 5)に、アトラス0番・タイル(2, 3)を直接配置する(自動接続なし)
set_cell(Vector2i(10, 5), 0, Vector2i(2, 3))
生成したマップの上を敵に賢く歩かせたくなったら、NavigationRegion2Dとナビゲーションメッシュ でタイルマップから経路探索用のメッシュを作れます。
まとめ
- Terrains(オートタイル) は、境界タイルの選択をエンジンに任せる機能。地形を塗るだけで角・辺・中央が自動配置される
- ノードは
TileMapLayerを使う(旧TileMapはGodot 4.3で非推奨) - 核心は Peering Bits ——各タイルに「周りがどの地形のとき使うか」を3x3で教える作業
- GDScriptの
set_cells_terrain_connect()で、座標を渡すだけのプロシージャル生成ができる(TileMapLayerではレイヤー引数なし) - 広大なマップは、レイヤー分割・
VisibleOnScreenEnabler2D・チャンクで最適化する
まずは2種類の地形で試し、大まかに塗るだけで境界が整っていく気持ちよさを体感してみてください。一度Peering Bitsを設定すれば、その後のレベルデザインの速度が劇的に変わります。
さらに学ぶために
- NavigationRegion2Dとナビゲーションメッシュ ——タイルマップ上に敵の経路探索メッシュを作る
- Camera2D実践テクニック集 ——広いタイルマップをスクロールで見せる
- カスタムリソースの作成と活用 ——マップ生成のパラメータをデータ化する
- Godot公式ドキュメント:Using Tilemaps ——TileSet・Terrainsの一次情報