はじめに
2Dゲームのマップは、多くの場合「タイル」と呼ばれる小さな画像(32×32pxなど)を敷き詰めて作られます。手作業でそれぞれ配置したら大変ですが、それを効率化するのがTileMapLayerです。
Godot 4.2以降、従来の「TileMap」は「TileMapLayer」に置き換わり、さらに使いやすくなりました。
この記事では以下を学べます:
- TileMapLayerの基本的な使い方
- タイルセットの設定方法
- スクリプトからタイルを追加・削除する
- ランダムマップや動的なマップ変更
- 従来のTileMapとの違い

TileMapLayerとは?
TileMapLayerは、タイル画像の配列を管理し、2Dマップを効率的に構築するノードです。
「タイルセット」という複数のタイル画像をまとめたリソースを参照して、グリッド上にタイルを配置し、広大なマップを素早く構築できます。
継承ツリー:
TileMapLayer
↑
Node2D
↑
Node
↑
Object
Godot 4.2以降での変更:従来の「TileMap」は「TileMapLayer」に置き換わりました。複数レイヤーを持つマップを作る場合は、複数のTileMapLayerノードを階層状に配置します。
このノードを使うべき場面
使う場面:
- 2Dステージ・ダンジョンマップの構築
- ランダムマップの生成(スクリプトでタイルを配置)
- 複数レイヤーを使った奥行き表現(背景・地面・オブジェクト)
- 当たり判定付きの地形設定
- 町やレベルエディタの背景作成
使わない場面:
- 単なる背景画像 → Sprite2Dを使う
- 非グリッド的なレイアウト → 個別のNode2Dやボディを使う
主なプロパティと機能
| プロパティ/メソッド | 型・引数 | 説明 |
|---|---|---|
tile_set |
TileSet | 使用するタイルセットリソース(.tres形式) |
enabled |
bool | TileMapLayerの表示・物理演算有効フラグ |
y_sort_enabled |
bool | Y座標でソート(イソメトリックビューに有効) |
set_cell(coords, source_id, atlas_coords) |
Vector2i, int, Vector2i | 指定座標にタイルを設置。source_idはタイルセット内のID |
get_cell_source_id(coords) |
Vector2i → int | 指定座標のタイル種類を取得 |
erase_cell(coords) |
Vector2i | 指定座標のタイルを削除 |
get_used_cells() |
→ Array[Vector2i] | 配置されているすべてのタイル座標を配列で取得 |
コード例1:シンプルなマップ配置
extends TileMapLayer
func _ready():
# タイルセットはインスペクターから指定
# または set_tile_set(new_tileset) で設定
# (0,0) 座標にソースID 0 のタイルを配置
set_cell(Vector2i(0, 0), 0, Vector2i(0, 0))
set_cell(Vector2i(1, 0), 0, Vector2i(0, 0))
set_cell(Vector2i(2, 0), 0, Vector2i(1, 0)) # 別のタイル
コード例2:ランダムマップ生成
extends TileMapLayer
@export var width: int = 50
@export var height: int = 50
@export var grass_tile_id: int = 0
@export var water_tile_id: int = 1
func _ready():
generate_random_map()
func generate_random_map():
for x in range(width):
for y in range(height):
var tile_type = randi() % 2 # 0 または 1
var source_id = grass_tile_id if tile_type == 0 else water_tile_id
set_cell(Vector2i(x, y), source_id, Vector2i(0, 0))

もっと使いこなす:カスタマイズできるパラメータ
| パラメータ | 説明 | 用途 |
|---|---|---|
y_sort_enabled |
true/false | Y座標順にソート(キャラが後ろに行くと背後に隠れるような表現に使う) |
tile_set |
TileSet リソース | 複数タイルセットを持ち、スクリプトで切り替え可能 |
enabled |
true/false | マップ全体の表示・物理有効フラグ |
| タイル属性(カスタムデータ) | 文字列・bool・int など | タイルごとに「通路・壁・床」などの属性を設定し、スクリプトで参照 |
| 物理レイヤー | Polygon2D など | タイルセット編集で物理形状を定義。当たり判定を自動生成 |
まとめ
一言要約:TileMapLayerは、タイル画像を敷き詰めて効率的に2Dマップを構築するノードで、Godot 4.2以降の推奨ノードです。
ポイント:
- タイルセット(.tres)とTileMapLayerを組み合わせて使う
set_cell()でプログラム的にタイルを配置し、ランダムマップを生成できる- タイルセットエディタで物理形状やカスタムデータを定義すれば、当たり判定や特殊属性が自動処理される
次回予告:次はAnimationPlayerを解説します。スプライトやUIの動きをアニメーションとして再生する方法が分かります。
シリーズ:Godot 4 ノード解説
- 001-040: 基本ノード(準備中)
- 041:StaticBody2D
- 042:TileMapLayer
- 043:AnimationPlayer
- 044:AnimationTree
- 045:AudioStreamPlayer
- 046:AudioStreamPlayer2D
- 047:GPUParticles2D
- 048:CPUParticles2D
- 049:Line2D
- 050:CanvasLayer
この記事はGodot 4.xをもとに執筆しています。


コメント