さぁ、UnityのTilemapを始めよう！5/8 ~Tilemap関連のコンポーネント編~

「[さぁ、UnityのTilemapを始めよう！](https://qiita.com/RyotaMurohoshi/items/5c3cdd24b7e09bfd8ed3)」 シリーズ、全8回の内の5回目です。

今回は「Tilemap関連のコンポーネント編」と題して、Tilemapに関連するコンポーネント、そしてゲームオブジェクトについて説明します。

前回は、「[第4回 Tile について編](https://qiita.com/RyotaMurohoshi/items/4f88763e620a8d329163)」です。

# Tilemap関連のコンポーネントの概要

まずは、Tilemap関連のゲームオブジェクトとコンポーネントを整理します。この記事では、Collider関連のコンポーネントには触れません。Colliderに関しては、後の「[第7回 TilemapとCollider編](https://qiita.com/RyotaMurohoshi/items/8d1e7dfb4a1b2aca0463)」を参照してください。

シーン上にTilemap関連のゲームオブジェクト作成するためには、HierarchyウィンドウのCreateタブから、「2D Object > Tilemap」を選択します。そうすると、図のようにGridゲームオブジェクトとTilemapゲームオブジェクトという2つのゲームオブジェクトが生成されます。

![tilemap_gameobjects.png](https://qiita-image-store.s3.amazonaws.com/0/4125/48420c23-c829-a99e-0d94-10a9e1e1e3df.png)

Gridゲームオブジェクトには、次のようにGridコンポーネントが付与されています。

![grid.png](https://qiita-image-store.s3.amazonaws.com/0/4125/7e11d0f6-206b-ac26-5706-25bdb6b3d24f.png)

Tilemapゲームオブジェクトには、次のようにTilemapコンポーネントとTilemapRendererコンポーネントが付与されています。

![tilemap.png](https://qiita-image-store.s3.amazonaws.com/0/4125/400015e7-61a6-a0b4-bc1b-f3d6ddce8047.png)

Gridゲームオブジェクトは、子ゲームオブジェクトとして複数のTilemapゲームオブジェクトをもつことができます。こうすることで、レイヤーごとに別のTilemapにマップを作成するというテクニックを使うことができます。

![tilemap_layered_gameobjects.png](https://qiita-image-store.s3.amazonaws.com/0/4125/e306f152-7d46-be3f-571a-1b9d988b16c2.png)

またお勧めはしませんが、次の画像のようにひとつのゲームオブジェクトにGridコンポーネント、Tilemapコンポーネント、TilemapRendererコンポーネントを付与してTilemapとして有効なゲームオブジェクトを作成することもできます。

![all_in_one_objects.png](https://qiita-image-store.s3.amazonaws.com/0/4125/49022d46-cdf8-0279-f2d8-5b5232d79d07.png)

# Gridコンポーネント

この節ではGridコンポーネントについて説明します。

Gridコンポーネントは、「UnityEngine.Grid」というクラスで、親クラスは「UnityEngine.GridLayout」です。Tilemapの拡張要素であるBrushというクラスでは、「Grid」ではなく、「GridLayout」が使われています。

Gridコンポーネントは次のような設定項目を持ちます。これらの設定項目は、Gridゲームオブジェクトのすべての子Tilemapゲームオブジェクトに対して適応されます。

* Cell Size : セルの大きさ
* Cell Gap : セルとセルの隙間の大きさ
* Cell Swizzle : Tilemapの平面

Tilemapはデフォルト設定だとXY平面に対して作成されます。「Cell Swizzle」を変更することで、XZ平面に対しても作成することができるようになります。

# TilemapRendererコンポーネント

この節ではTilemapRendererコンポーネントについて説明します。

TilemapRendererコンポーネントは、「UnityEngine.Tiilemaps.TilemapRenderer」というクラスで、親クラスは「UnityEngine.Renderer」です。

TilemapRendererコンポーネントは次のような設定項目を持ちます。

* Sorting Layer
* Order In Layer
* Mask Interaction

このようにSpriteRendererコンポーネントと共通の設定項目を持ち、描画設定を司るコンポーネントです。これらの項目を設定することで、各TilemapそしてSpriteRenderer間の描画順序を制御することが可能です。

# Tilemapコンポーネント

この節ではTilemapコンポーネントについて説明します。

Tilemapコンポーネントは、「UnityEngine.Tilemaps.Tilemap」というクラスで、親クラスは「UnityEngine.GridLayout」です。Tilemapコンポーネントは、どこの座標にどのTileアセットを保持しているのかという情報を保持する、キーとなるコンポーネントです。また色やアンカーなどの描画・配置に関する設定項目も持っています。

このクラスには、実行時にTileを追加・削除・更新するためのメソッドが数多く存在します。単純な背景や固定のプラットフォームとして使うのではなく、マップにギミックを持たせる場合、このクラスを参照し操作してください。

# 次回とシリーズ一覧

次回は、「[第6回 Tileの描画編](https://qiita.com/RyotaMurohoshi/items/fc473a2dd54441e9b94e)」です。

* [第1回 概要編](https://qiita.com/RyotaMurohoshi/items/5c3cdd24b7e09bfd8ed3)
* [第2回 とにかくまずは触ってみよう編](https://qiita.com/RyotaMurohoshi/items/f386e81b5e2ea1ffe57d)
* [第3回 Spriteの設定編](https://qiita.com/RyotaMurohoshi/items/718e2cceec3b6da28224)
* [第4回 Tile について編](https://qiita.com/RyotaMurohoshi/items/4f88763e620a8d329163)
* [第5回 Tilemap関連のコンポーネント編](https://qiita.com/RyotaMurohoshi/items/ae46343828634a2d3321)
* [第6回 Tileの描画編](https://qiita.com/RyotaMurohoshi/items/fc473a2dd54441e9b94e)
* [第7回 TilemapとCollider編](https://qiita.com/RyotaMurohoshi/items/8d1e7dfb4a1b2aca0463)
* [第8回 関連リンクとまとめ編](https://qiita.com/RyotaMurohoshi/items/eddbb74e07e79f6c2185)