【Godot】Terrains機能でオートタイル(自動タイル配置)を設定する

作成: 2025-06-20最終更新: 2026-07-09

Godot 4のTerrains(オートタイル)機能を、TileMapLayerノードの作成からPeering Bitsの理解、実際の描画、GDScriptによるプロシージャル生成まで、エディタ画面つきで手順どおり解説します。

2Dマップを作るとき、草地と土の境界、崖の角、道のカーブ——タイルのつなぎ目を1枚ずつ手で選んで並べる作業は、想像以上に骨が折れます。マップを少し描き変えるたびに、周りの境界タイルも全部貼り直し……という経験はないでしょうか。

Godot 4の Terrains(オートタイル) 機能を使えば、この面倒がまるごと消えます。「ここは草」「ここは土」と大まかに塗るだけで、境界に合うタイルをエンジンが自動で選んで並べてくれるのです。この記事では、TileMapLayer ノードの作成から、Terrainsの心臓部である Peering Bits の理解、実際の描画、そしてGDScriptでのプロシージャル生成まで、実際のエディタ画面を追いながら順番に解説します。

オートタイルのイメージ。ラフに塗った2種類の地形の境界に、エンジンが自動で角や辺のタイルをはめ込んで滑らかにつなぐ様子

この記事でわかること

  • オートタイル が何を自動化してくれるのか
  • TileMapLayer ノードとTileSetの準備手順(旧TileMapとの違い)
  • Terrainsの核心 Peering Bits (3x3の接続ルール)の考え方
  • Terrainブラシでの描画と、set_cells_terrain_connect() による プロシージャル生成

Sponsored

オートタイルは何を自動化するのか

オートタイルが解決するのは、 「境界タイルの選択」 という単調な作業です。

手作業でマップを作る場合、草地の真ん中には「草の中央タイル」、草と土の境目には「左が草・右が土のタイル」、角には「角用のタイル」……と、位置ごとに正しいタイルを自分で選んで置く必要があります。マップを描き変えれば、周囲の境界タイルもやり直しです。

Terrainsを設定しておけば、この判断をエンジンが肩代わりします。あなたは 「この範囲は草」「この範囲は土」と地形を塗るだけ 。隣り合うタイルの組み合わせを見て、エンジンが角・辺・中央の適切なタイルを自動で配置してくれます。

オートタイルの前後比較。左は手動で境界タイルを1枚ずつ並べてつなぎ目がガタガタな状態、右はTerrainsで地形を塗るだけで境界が自動的に滑らかにつながった状態

RPGのフィールド、ローグライクのダンジョン、サンドボックスの地形破壊——マップの形が頻繁に変わるゲームほど、この自動化の恩恵は大きくなります。

準備:TileMapLayerとTileSetを用意する

まずはマップを描くための土台を作ります。

ステップ1:TileMapLayerノードを作る

シーンにタイルマップ用のノードを追加します。ノード作成ダイアログで「tilemap」と検索すると、TileMapTileMapLayer の2つが出てきます。

ノード作成ダイアログ。tilemapで検索するとTileMap(非推奨の警告マークつき)とTileMapLayerが表示され、TileMapLayerが選択されている

ここで選ぶのは TileMapLayer です。旧 TileMap ノードは Godot 4.3で非推奨(deprecated) となり、上の画像でも警告マークが付いています。現在は 1レイヤー=1つの TileMapLayer ノード という設計が基本で、地面・装飾・当たり判定などをそれぞれ別の TileMapLayer に分けて管理します。

ステップ2:TileSetを新規作成する

TileMapLayer を選択し、インスペクタの「Tile Set」プロパティから「New TileSet」を選びます。これで、タイルの見た目や当たり判定を定義する TileSetリソース が作られます。

TileMapLayerのインスペクタ。Tile SetプロパティのドロップダウンからNew TileSetを選択している

ステップ3:タイルセット画像をアトラスに追加する

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

TileSetエディタ。左下の+でアトラスを作成し、タイルセット画像を登録。Setupモードでタイルサイズを16pxに設定している

これでマップを描く準備が整いました。ここからが本題のTerrains設定です。

Sponsored

Terrainsの核心:Peering Bitsを理解する

設定に入る前に、Terrainsの心臓部である Peering Bits(ピアリングビット) の考え方を押さえておきましょう。ここが腑に落ちると、以降の設定作業の意味が一気に分かります。

Peering Bitsとは、各タイルに教え込む 「このタイルは、周りがどの地形のときに使われるべきか」という接続ルール です。1枚1枚のタイルに対して、3x3のグリッドで指定します。

Peering Bitsの3x3グリッド解説図。中央のマスは自分自身の地形、周囲8マスは上下左右と斜めの隣接タイルの地形を表す。中央が草・下と右が土なら、そのタイルは草と土の右下境界に使われる
  • 中央のマス :このタイル自身がどの地形か(例:草)。
  • 周囲の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つの地形を、目立つ色で作っています。

TileMapLayerインスペクタのTerrain Sets。ModeをMatch Corners and Sidesに設定し、Terrainsに名前Forest Terrain・色つきで地形を1つ追加している

Colorは、次の手順でタイルに塗るときの「筆の色」になります。マップの見た目には影響しないので、他の地形と区別しやすい色を選べば十分です。

ステップ5:Paintモードで各タイルにPeering Bitsを塗る

TileSetエディタで「Paint」モードに切り替え、「Paint Properties」のドロップダウンから Terrains を選びます。

TileSetエディタのPaintモード。Paint PropertiesのドロップダウンからTerrainsを選択している

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

Terrainを選択してタイルをハイライトしている様子。使用するTerrain(地形)タイルを選択してハイライトする、という注釈つき

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

Terrainを塗り終えたTileSetエディタ。地形に登録されたタイル群が色(ピンク)でハイライトされている
Sponsored

Terrainブラシでマップを描画する

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

TileMapパネルのTerrainsタブ。Terrain Set 0のForest Terrainを選び、マップ上に地形を描画している。境界が自動でつながっている

「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) :オープンワールドのような巨大マップでは、プレイヤー周辺の領域だけを動的に読み込み・破棄する仕組みが有効です。マップを一定サイズのブロックに区切り、近づいたら生成、離れたら解放します。
Sponsored

実践:GDScriptでダンジョンを自動生成する

Terrainsはエディタで手描きするだけの機能ではありません。 GDScriptから呼び出せば、実行時にマップを自動生成 できます。ローグライクの毎回変わるダンジョン、サンドボックスの掘削地形、シミュレーションの地形生成——「決まった見た目のマップを手で描く」のではなく「ルールでマップを作る」ジャンルで威力を発揮します。

GDScriptによるプロシージャル生成の流れ図。左のコードが床にしたい座標の配列を作り、set_cells_terrain_connectに渡すと、右で境界が自動接続されたダンジョンマップが生成される

鍵になるのが 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 ではレイヤー番号の引数が不要 :旧 TileMapset_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を設定すれば、その後のレベルデザインの速度が劇的に変わります。

さらに学ぶために