前回は、Unity のアセット TopDown Engine のサンプルゲームの一つ KoalaDungeon の床や壁など種類別のタイルマップ特有のコンポーネントを紹介しました。

Unity CompositeCollider2D の Outlines によるコライダー形状
今回は、その続きとして、まだ紹介していない種類別のタイルマップ特有のコンポーネントや、タイルマップではないけれどもタイルマップ群と同じ階層にある Props ゲームオブジェクトについて紹介します。
※ Unity は 2021.3.14f1、TopDown Engine は 3.1.1 です。
WallsShadow タイルマップ
Walls タイルマップの壁のタイルの下側に影をつけるためのタイルマップです。
MMTilemapShadow コンポーネント
対象のタイルマップのタイル配置を参照に、そのタイルの下側に影をつけます。

KoalaDungeon WallsShadow の MMTilemapShadow コンポーネント
ゲートの影は、ゲートの絵の一部として描かれていました。

KoalaDungeon のゲートの影は画像として用意されています。
しかし、WallsShadow タイルマップで表現される Walls タイルマップの壁たちの影は MMTilemapShadow コンポーネントによって作られています。
WallsShadow ゲームオブジェクトの有効性を切り替えると、グリッド線が下に少しずれ、壁の下側に影ができました。

KoalaDungeon の WallsShadow の有効無効を切り替えるとグリッド線が下に少しずれ、壁の下に影ができました。
WallsShadow タイルマップは Inspector ウィンドウの Transform コンポーネントの position.y = -0.25 に設定し、他のタイルマップよりも -0.25 ほど下にずらしているようです。
コードの内容は、 ReferenceTilemap プロパティに指定された Walls (壁だけ配置されている) タイルマップに配置されたタイルをコピーして、アタッチされているWallsShadow タイルマップに設定しているようです。
そのコピーしたタイルを -0.25 下方向にずらして配置して表示する際に、KoalaWallsShadow という灰色の Sprite/Default マテリアルを用いて描画することで、コピーしたタイルの色味を変えて影のように表示しているようです。

KoalaDungeon の WallsShadow タイルマップは Transform で位置をずらし、マテリアルも灰色のスプライトを設定しています。
参照元のタイルマップを変更した場合、 UpdateShadows ボタンで再度タイル群をコピーして影用のタイルマップの更新ができます。

KoalaDungeon Walls タイルマップのみ
WallsShadow タイルマップのタイル群は、Walls タイルマップのタイル群と形は同じで、色合いが薄暗くなっています。
WallsShadow タイルマップが -0.25 下にずれて表示され、TilemapRenderer コンポーネントの Sorting Layer の関係で Walls の方が手前に表示されるので、床にはみでた下側 0.25 マス分のみが影のように表示されています。

KoalaDungeon WallsShadow タイルマップのみ
Holes タイルマップ
Ground タイルレイヤーの床に通行不能の穴(床のタイルを消しています)をあとから設定するためのタイルマップです。
TilemapCollider2D コンポーネント
Ground, Walls の TilemapCollider2D コンポーネントとは異なり、 is Trigger が有効になっていて、 Used By Composite はチェックされていません。
この設定では、Ground, Walls のように CompositeCollider2D コンポーネントにコライダーの管理を委譲せず、自身でトリガー判定を行います。

KoalaDungeon Holes の TilemapCollider2D コンポーネント
※詳しくは前回の Ground の項目を参照ください。
Rigidbody2D コンポーネント
Rigidbody2D コンポーネントは Ground, Walls と同じ設定です。

KoalaDungeon Holes の Rigidbody2D コンポーネント
※詳しくは前回の Ground の項目を参照ください。
CompositeCollider2D コンポーネント
CompositeCollider2D コンポーネントは Ground の設定と同じです。

KoalaDungeon Holes の CompositeCollider2D コンポーネント
※詳しくは前回の Ground の項目を参照ください。
MMTilemapBoolean コンポーネント
BooleanClean ボタンを押すと、TilemapToClean で指定した Tilemap のタイルを null(タイルなし) に変えます。
null に変えられる対象は、このゲームオブジェクト (Holes) が持つ Tilemap で何らかのタイルを設定した場所です。
Holes の Tilemap のある座標にタイルがあった場合、TilemapToClean (サンプルでは Ground) のタイルマップの同じ座標にタイルがあれば、 null に置き換えます。

KoalaDungeon Holes の MMTilemapBoolean コンポーネント
Holes ゲームオブジェクトのみ有効にした際のシーンでは、床を穴に場所を指定するためタイルが配置されています。
このタイルの位置の Ground タイルマップのタイルは null に置き換えられます。

KoalaDungeon Holes タイルマップのタイルの配置
Props (タイルマップではありません)
Props には松明や壺、コインといったマップに配置されるものがまとめられています。
Grid 直下にありますが、Tilemap コンポーネントを持たないため、Grid のマス目の影響は受けません。
松明はスプライトのアニメーションを表示する機能であったり、コインはコインが増える処理を行う機能がついていたりと、種類に応じて異なるコンポーネント構成のゲームオブジェクトが配置されています。

Unity TopdownEngine KoalaDungeon の Props の下のゲームオブジェクトは Grid の影響を受けません。
まとめ
タイルマップを実現するためには Grid, Tilemap, TilemapRenderer コンポーネントが必要でした。
また、壁などの当たり/トリガー判定のための Tilemap に特化したコライダー TilemapCollider2D コンポーネントや、 TopDown Engine 独自のコンポーネントが使われていることもわかりました。
コメント