mcpField
U
unity-tilemap-2d

unity-tilemap-2d

github.com/gamedev-skills開発5.4k6.1k 回インストール今日更新
リポジトリ

unity-tilemap-2d について

Unity 6.3 LTSで2Dタイルマップを作る開発者向けのスキルです。GridとTilemapの設定、ペイント、衝突判定、Rule Tiles、スクリプトによる実行時編集を扱います。

主な機能

  1. 01Gridと複数レイヤーのTilemap作成
  2. 02Tile Paletteでのペイント
  3. 03Tilemapコライダーの設定
  4. 04Rule Tilesによる自動配置
  5. 05スクリプトによる編集と一括配置

活用シーン

  1. 01背景・地面・前景を持つ2Dレベルの作成
  2. 02固体レイヤーへの統合コライダー追加
  3. 03スクリプトによる部屋や床領域の生成
  4. 04実行時のマス目更新

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gamedev-skills/awesome-gamedev-agent-skills --skill unity-tilemap-2d

インストール後、Claude Code で/unity-tilemap-2dを入力して読み込まれたか確認します。

詳細

Unity 2D Tilemap

Grid/Tilemap システム、Tile Palette、コライダー、実行時のペイントを使って、Unity 6.3 LTS でタイルベースの2Dレベルを作成し、スクリプトで操作します。対象は Unity 6.3 LTS(6000.3) です。

パッケージに関する注意: Tilemap のコア機能(Grid、Tilemap、Tile、TilemapCollider2D)は標準搭載されています。Rule Tiles、Animated Tiles、Tile Palette ブラシは別パッケージ「2D Tilemap Extras」(com.unity.2d.tilemap.extras)に含まれています — RuleTile を使う前に、Package Manager からインストールしてください。

使用する場面

  • タイルをペイントして2Dレベルを配置する場合、Grid + Tilemap をセットアップする場合、マップにコリジョンを追加する場合、自動タイル配置に Rule Tiles を使う場合、またはスクリプトからタイルを生成・編集する場合に使用します。
  • シーンに Tilemap を子として持つ Grid が含まれる場合、または *.asset のタイル/パレットファイルが含まれる場合に使用します。

使用しない場面: レベル デザイン の実践(ペース配分、ブロックアウト、レイアウトの原則)→ level-design。3Dのタイル/グリッド配置 → Unity 独自の3Dツール(ProBuilder/グリッドブラシ。ここには専用スキルはありません)。タイル上を移動するプラットフォーマーのキャラクター → platformer / unity-physics。

基本的なワークフロー

  1. グリッドを作成: GameObject → 2D Object → Tilemap → Rectangular(Grid の Cell Layout では、六角形やアイソメトリックのレベル向けに Hexagonal と Isometric も選べます)。これにより、子に Tilemap(と TilemapRenderer)を持つ Grid が作成されます。レイヤーごと(背景、地面、前景)に Tilemap を1つ使い、各レンダラーのソートを設定します。
  2. Tile Palette を開き(Window → 2D → Tile Palette)、スライスしたスプライトシートをドラッグして Tile アセットを作成し、ブラシツールでペイントします。
  3. ソリッドレイヤーに コリジョンを追加: TilemapCollider2D を追加します。コライダーを1つにまとめて(大幅に軽量化でき、隙間もなくなります)使用するには、CompositeCollider2D(および Static に設定した Rigidbody2D)も追加し、タイルマップコライダーの Used By Composite を有効にします。
  4. Rule Tiles で自動タイル配置(2D Tilemap Extras)を行い、すべてのバリエーションを手作業で配置する代わりに、エッジや角に適切なスプライトが自動で選ばれるようにします。
  5. スクリプトで実行時に編集: セル座標(Vector3Int)を使って SetTile、GetTile、SetTilesBlock を呼び出し、Grid/Tilemap でワールド座標とセル座標を相互変換します。
  6. Play モードで 確認 します。コリジョン(Physics Debugger)、ソート順、そして一括編集後に RefreshAllTiles が実行されたことを確認します。

パターン

1. 実行時にタイルをペイントする(セル座標)
using UnityEngine;
using UnityEngine.Tilemaps;

public class TilePainter : MonoBehaviour
{
    [SerializeField] private Tilemap tilemap;   // assign the target Tilemap
    [SerializeField] private TileBase groundTile;

    // World position -> cell, then place a tile.
    public void PaintAt(Vector3 worldPos)
    {
        Vector3Int cell = tilemap.WorldToCell(worldPos);
        tilemap.SetTile(cell, groundTile);
    }

    public bool IsSolid(Vector3 worldPos)
        => tilemap.GetTile(tilemap.WorldToCell(worldPos)) != null;
}
2. 領域をまとめて塗りつぶす(セルごとの SetTile より高速)
// SetTilesBlock writes a whole BoundsInt in one call — use it for procedural rooms/floors.
public void FillFloor(Tilemap map, TileBase tile, int width, int height)
{
    var bounds = new BoundsInt(0, 0, 0, width, height, 1);
    var tiles  = new TileBase[width * height];
    for (int i = 0; i < tiles.Length; i++) tiles[i] = tile;
    map.SetTilesBlock(bounds, tiles);
}
3. クリアと更新
tilemap.SetTile(cell, null);   // null erases the tile at that cell
tilemap.RefreshTile(cell);     // re-evaluate just this cell's rule/animated neighbors (cheap)
// RefreshAllTiles() re-evaluates the ENTIRE map — reserve it for full regenerations, not per-edit.

注意点

  • RuleTile 型が見つからない — 標準搭載ではありません。Package Manager から 2D Tilemap Extras パッケージ(com.unity.2d.tilemap.extras)をインストールしてください。
  • タイルごとのコライダーでパフォーマンスが大幅に低下する/継ぎ目ができる — 静的な Rigidbody2D と Used By Composite を設定した CompositeCollider2D を追加して、レイヤー全体を滑らかな1つの形状に統合します。
  • ワールド座標とセル座標を混同する — SetTile/GetTile が受け取るのはワールド座標ではなく、Vector3Int の セル座標 です。必ず WorldToCell / CellToWorld で変換してください。
  • タイルがスプライトの背後/手前に予想外に描画される — 各 TilemapRenderer の Sorting Layer と Order in Layer を設定してください。複数の Tilemap には明示的な描画順が必要です。
  • スクリプトで編集した後に Rule Tiles/Animated Tiles が更新されない — 書き込み後に更新してください。ただし、少数の編集には対象を絞った RefreshTile(cell) を使用します。RefreshAllTiles() はマップ上のすべてのタイルを再評価するため、大規模なレベルでは処理が停止することがあります。マップ全体を再生成する場合に限り、全体の更新を使用してください。
  • 誤ったレイヤーにペイントしてしまう — Tile Palette のアクティブな対象 Tilemap にペイントされます。「Active Tilemap」のドロップダウンを確認してください。

参考資料

  • 主なドキュメント:Unity Manual の「Tilemaps」 (https://docs.unity3d.com/Manual/tilemaps/work-with-tilemaps/tilemap-reference.html)、 ScriptReference/Tilemaps.Tilemap、および Rule Tile の参考資料となる 2D Tilemap Extras パッケージのマニュアル (https://docs.unity3d.com/Packages/[email protected]/manual/index.html)。 (@6.0 は Unity 6.3 LTS に同梱されているバージョンです。以前の @1.6 のドキュメントは Unity 2021 時代のプロジェクト向けです。)

関連スキル

  • level-design — エンジンに依存しないブロックアウト、ペース配分、タイル配置の実践。
  • procedural-gen — SetTilesBlock に渡すタイルデータ(ノイズ、RNG、ダンジョン)の生成。
  • platformer / roguelike — 移動や生成とこのスキルを組み合わせるジャンル。

コメント