【Unity】Unity 2D Tilemap入門:タイルパレット・当たり判定・レイヤー・ルールタイル

作成: 2026-07-12

2Dゲームの地形はTilemapで効率よく作れます。Grid・Tilemap・Tile Paletteの関係、Tilemap Collider 2DとComposite Collider 2Dによる当たり判定、地面と装飾のレイヤー分け、Rule Tileによる境界の自動化、SetTileでのスクリプト配置まで解説します。

2Dゲームの地面や壁、洞窟、街並み——これらをSprite 1枚ずつ並べて作るのは、気が遠くなる作業です。そこで使うのが Tilemap 。小さなタイル(絵)を格子状に敷き詰めて、広いマップを効率よく組み立てる仕組みです。Spriteとスプライトシート は用意できたけれど、ステージをどう作ればいいか止まっていませんか?

この記事では、Tilemapの 3つの部品(Grid・Tilemap・Tile Palette)から、タイルに 当たり判定 を付ける方法、地面と装飾を レイヤー に分けるコツ、境界タイルを 自動配置 するRule Tile、そして スクリプトからタイルを置く 方法まで、2Dステージ作りの土台をひととおり解説します。

Tilemapのイメージ。パレットから選んだ小さなタイルを、筆で格子状に敷き詰めて、地面や壁のある2Dステージを組み立てていく

この記事でわかること

  • Grid・Tilemap・Tile Palette の関係(格子・地図・絵の具箱)
  • タイルに 当たり判定 を付ける(Tilemap Collider 2D+Composite)
  • 地面・装飾を 複数のTilemap に分ける(Sorting Layer)
  • Rule Tile で境界タイルを自動配置する(2D Tilemap Extras)
  • 実践:SetTile でスクリプトからタイルを配置する

動作確認環境: Unity 2022.3 LTS / Unity 6

Sponsored

Grid・Tilemap・Tile Palette

Unityのタイルマップは、3つの部品でできています。まずこの関係を押さえると、この先が迷わず読めます。

Tilemapの3部品の関係図。Grid(格子の親)の下にTilemap(タイルを敷く地図)がぶら下がり、Tile Palette(タイルを登録した絵の具箱)から選んだタイルをTilemapに描く
部品役割
Gridタイルを並べる格子を管理する親のGameObject。マス目の大きさを決める
Tilemapその格子にタイルを実際に敷く子のコンポーネント。1枚の地図に相当
Tile Palette使えるタイルを登録した絵の具箱。ここからタイルを選んで描く

作る手順

  1. Hierarchyで右クリック → 2D Object > Tilemap > Rectangular を選ぶと、Grid+Tilemapが自動で作られます
  2. Window > 2D > Tile Palette でパレットを開き、Create New Palette で新規パレットを作成
  3. スライス済みのスプライトシート(Spriteとスプライトシート で作ったもの)をパレットにドラッグ。各マスが「使えるタイル」として登録される
  4. パレットでタイルを選び、Sceneビューを筆でなぞるように描いていく

これだけで、広い地面や壁があっという間に敷けます。1マスずつSpriteを置く必要はありません。

補足: 1つのTile Palette(絵の具箱)は、複数のTilemap(地図)で共有できます。絵の具箱は1つ、地図は何枚でも、という使い方が基本です。

タイルに当たり判定を付ける

床の上をプレイヤーが歩き、壁で止まる——この 当たり判定 は、Tilemapにコンポーネントを足すだけで、敷いたタイル全体に一気に付きます。

Tilemapの当たり判定の図。Tilemap Collider 2Dはタイル1枚ずつに当たり判定を作るが、Composite Collider 2Dを足すと隣り合うタイルの判定が1枚の輪郭に結合され、引っかかりが消えて動作も軽くなる
  1. 地形のTilemapに Tilemap Collider 2D を追加する。これで、タイルが敷かれた場所すべてに自動で当たり判定が生まれる
  2. さらに Composite Collider 2D を追加する(Rigidbody 2D も一緒に付くので、その Body Type を Static にする)
  3. Tilemap Collider 2Dの Used By Composite にチェック を入れる

Composite Collider 2Dを足す理由は2つです。 タイルごとに分かれた当たり判定が1枚の輪郭に結合される ため、タイルの継ぎ目にプレイヤーが引っかかる不具合が消えます。さらに 当たり判定の数が激減して動作が軽くなる ため、広いマップでも軽快に動きます。プレイヤー(Rigidbody 2DCollider 2D)は、この地形の上を歩けるようになります(Rigidbody2DとCollider2D 参照)。

Sponsored

複数のTilemapでレイヤー分け

マップは1枚のTilemapでも作れますが、 役割ごとにTilemapを分ける と管理がぐっと楽になります。Gridの下に、Tilemapを持つGameObjectを複数ぶら下げます。

複数Tilemapのレイヤー分けの図。1つのGridの下に背景・地面・装飾の3つのTilemapが重なり、合成されて1つの完成マップになる。当たり判定は地面Tilemapだけに付ける
Grid
├── Background (Tilemap)   # 背景(空・遠景)。当たり判定なし
├── Ground (Tilemap)       # 地面・壁。Tilemap Collider 2D + Composite
└── Decoration (Tilemap)   # 草・小物。地面の上に重ねる。当たり判定なし
  • 前後関係(描画順) :各Tilemapの Tilemap RendererSorting LayerOrder in Layer で決めます。数字が大きいほど手前に描かれます。地面の上に草を重ねたいなら、Decoration のOrderを Ground より大きくします。
  • 役割の分離 :当たり判定は Ground だけに持たせ、BackgroundDecoration(草・看板)は当たり判定なしにします。「当たる地面」と「飾りだけの装飾」を混ぜないのがコツです。

Sorting LayerはSprite全体で共通 です。プレイヤーのSpriteRendererのSorting Layer/Orderも同じ土俵で比較されるので、「プレイヤーを装飾の手前に出したい」といった調整もここで行います。詳しくは レイヤーとタグ も参考になります。

Rule Tileで境界を自動化する

草地と土の境目、壁の角、道の曲がり角——これらの 境界タイルを1枚ずつ選ぶのは大変 です。そこで使うのが Rule Tile 。周囲のタイルの状況を見て、エンジンが自動で適切なタイルを選んでくれる仕組みです。

Rule Tileの図。真ん中を塗るとエンジンが周囲を見て、角・縁・中央のタイルを自動で選び分�ける。手で1枚ずつ角や縁を置かなくても、塗るだけで境界がきれいに仕上がる

Rule Tileは標準機能ではなく、 2D Tilemap Extras パッケージに含まれます。

  1. Package Managerで com.unity.2d.tilemap.extras(2D Tilemap Extras)をインストール
  2. Create > 2D > Tiles > Rule Tile でRule Tileアセットを作成
  3. 「上下左右に同じタイルがあれば中央用、なければ縁用」といった ルール を設定し、各パターンに対応するスプライトを割り当てる
  4. このRule Tileをパレットに登録して塗る

一度ルールを組めば、あとは 地形を塗るだけで境界が自動でつながります 。手作業で角タイルを探す必要がなくなり、マップ作りが一気に速くなります。

まずは普通のタイルから: Rule Tileは強力ですが設定に手間がかかります。最初は普通のタイルでマップを組み、「境界を毎回手で置くのが辛い」と感じてから導入するのがおすすめです。

実践:スクリプトでタイルを配置する

タイルはエディタで手描きするだけでなく、 コードから動的に配置 できます。ローグライクの自動生成ダンジョン、サンドボックスの地形破壊、シミュレーションの地形生成——「マップをルールで作る」ジャンルで活躍します。

SetTileによるタイル配置の図。tilemap.SetTile(セル座標, タイル)を呼ぶと、指定した格子の座標にそのタイルが1枚置かれる。二重ループで座標を回してSetTileを繰り返し、床をプログラムで敷き詰める

鍵になるのが SetTile() です。「このセル座標に、このタイルを置く」と指定します。座標は Vector3Int(格子のマス目座標) で、ワールド座標(ピクセル)とは別物です。

using UnityEngine;
using UnityEngine.Tilemaps;

public class DungeonGenerator : MonoBehaviour
{
    [SerializeField] private Tilemap groundTilemap;
    [SerializeField] private TileBase floorTile;  // Inspectorでタイルアセットを割り当てる

    void Start()
    {
        // 20x15の床をまとめて敷く
        for (int x = 0; x < 20; x++)
        {
            for (int y = 0; y < 15; y++)
            {
                // セル座標(x, y)に床タイルを置く
                groundTilemap.SetTile(new Vector3Int(x, y, 0), floorTile);
            }
        }

        // セル座標(5, 5)のタイルを消す(穴を開ける)
        groundTilemap.SetTile(new Vector3Int(5, 5, 0), null);
    }
}

ポイントは2つです。 「セル座標とワールド座標を混同しない」SetTile はセル座標。マウス位置などのワールド座標からセルを知りたいときは tilemap.WorldToCell(worldPos) で変換します。逆は CellToWorld)と、 「消すときは null を渡す」SetTile(位置, null) でそのマスが空になります。大量に置き換えるなら SetTilesBlock でまとめて処理すると速いです)。生成アルゴリズム自体は「どのセルを床にするか」を決めるだけ——ランダムウォークやセルオートマトンで座標を決め、あとは SetTile で敷くだけです。

おまけ:先に知っておくと良いこと

  • タイルがぼやける・線が出る: タイル用スプライトは Filter ModePoint (no filter)CompressionNone にするとくっきりします。タイル同士の隙間に細い線が出るときは、スプライトの Mesh TypeFull Rect にするか、パディング付きのスプライトシートを使います。
  • マップの上を敵に歩かせたい: TilemapベースのAI経路探索は、Unity公式の2D用NavMeshは標準対応が弱いため、A*系アセットやグリッド探索を自作するのが一般的です。3Dの経路探索は NavMeshでAIパスファインディング を参照してください。
  • 広いマップはカメラでスクロール: 画面より大きいマップは Cinemachine でプレイヤーを追従させて見せます。Confinerで端を見せない設定も定番です。
  • Isometric(クォータービュー)も作れる: 2D Object > Tilemap > Isometric を選ぶと、斜め見下ろしのタイルマップになります。基本操作は同じで、Grid のCell Layoutが変わるだけです。

まとめ

  • Grid(格子)・Tilemap(地図)・Tile Palette(絵の具箱)の3部品でマップを作る。パレットは複数のTilemapで共有できる
  • 当たり判定は Tilemap Collider 2DComposite Collider 2D(Rigidbody 2DはStatic)。継ぎ目の引っかかりが消え、動作も軽くなる
  • 地面・装飾は 役割ごとにTilemapを分け、Sorting Layer / Order in Layer で前後を制御する
  • Rule Tile(2D Tilemap Extras)で境界タイルを自動配置。塗るだけで角や縁がつながる
  • SetTile(セル座標, タイル) でスクリプトからタイルを配置。消すときは null

まずは床タイルを敷き、Tilemap Collider 2DComposite Collider 2D を付けて、その上をプレイヤーが歩けるところまで作ってみてください。Tilemapは、2Dゲームのステージ作りの土台です。あなたの作りたい2Dの世界は、どんな地形からはじまりますか?

さらに学ぶために