TopDownEngine KoalaDungeon のマップの仕組み(4)

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

Unity CompositeCollider2D の Outlines によるコライダー形状

Unity CompositeCollider2D の Outlines によるコライダー形状

今回は、その続きとして、まだ紹介していない種類別のタイルマップ特有のコンポーネントや、タイルマップではないけれどもタイルマップ群と同じ階層にある Props ゲームオブジェクトについて紹介します。
※ Unity は 2021.3.14f1、TopDown Engine は 3.1.1 です。

WallsShadow タイルマップ

Walls タイルマップの壁のタイルの下側に影をつけるためのタイルマップです。

MMTilemapShadow コンポーネント

対象のタイルマップのタイル配置を参照に、そのタイルの下側に影をつけます。

KoalaDungeon WallsShadow の MMTilemapShadow コンポーネント

KoalaDungeon WallsShadow の MMTilemapShadow コンポーネント

ゲートの影は、ゲートの絵の一部として描かれていました。

KoalaDungeon のゲートの影は画像として用意されています。

KoalaDungeon のゲートの影は画像として用意されています。

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

KoalaDungeon の WallsShadow の有効無効を切り替えるとグリッド線が下に少しずれ、壁の下に影ができました。

KoalaDungeon の WallsShadow の有効無効を切り替えるとグリッド線が下に少しずれ、壁の下に影ができました。

WallsShadow タイルマップは Inspector ウィンドウの Transform コンポーネントの position.y = -0.25 に設定し、他のタイルマップよりも -0.25 ほど下にずらしているようです。

コードの内容は、 ReferenceTilemap プロパティに指定された Walls (壁だけ配置されている) タイルマップに配置されたタイルをコピーして、アタッチされているWallsShadow タイルマップに設定しているようです。

そのコピーしたタイルを -0.25 下方向にずらして配置して表示する際に、KoalaWallsShadow という灰色の Sprite/Default マテリアルを用いて描画することで、コピーしたタイルの色味を変えて影のように表示しているようです。

KoalaDungeon の WallsShadow タイルマップは Transform で位置をずらし、マテリアルも灰色のスプライトを設定しています。

KoalaDungeon の WallsShadow タイルマップは Transform で位置をずらし、マテリアルも灰色のスプライトを設定しています。

参照元のタイルマップを変更した場合、 UpdateShadows ボタンで再度タイル群をコピーして影用のタイルマップの更新ができます。

KoalaDungeon Walls タイルマップのみ

KoalaDungeon Walls タイルマップのみ

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

KoalaDungeon WallsShadow タイルマップのみ

KoalaDungeon WallsShadow タイルマップのみ

Holes タイルマップ

Ground タイルレイヤーの床に通行不能の穴(床のタイルを消しています)をあとから設定するためのタイルマップです。

TilemapCollider2D コンポーネント

Ground, Walls の TilemapCollider2D コンポーネントとは異なり、  is Trigger有効になっていて、 Used By Composite はチェックされていません。
この設定では、Ground, Walls のように CompositeCollider2D コンポーネントにコライダーの管理を委譲せず、自身でトリガー判定を行います。

KoalaDungeon Holes の TilemapCollider2D コンポーネント

KoalaDungeon Holes の TilemapCollider2D コンポーネント

※詳しくは前回の Ground の項目を参照ください。

Rigidbody2D コンポーネント

Rigidbody2D コンポーネントは Ground, Walls と同じ設定です。

KoalaDungeon Holes の RigidBody2D コンポーネント

KoalaDungeon Holes の Rigidbody2D コンポーネント

※詳しくは前回の Ground の項目を参照ください。

CompositeCollider2D コンポーネント

CompositeCollider2D コンポーネントは Ground の設定と同じです。

KoalaDungeon Holes の CompositeCollider2D コンポーネント

KoalaDungeon Holes の CompositeCollider2D コンポーネント

※詳しくは前回の Ground の項目を参照ください。

MMTilemapBoolean コンポーネント

BooleanClean ボタンを押すと、TilemapToClean で指定した Tilemap のタイルnull(タイルなし) に変えます。
null に変えられる対象は、このゲームオブジェクト (Holes) が持つ Tilemap で何らかのタイル設定した場所です。
Holes の Tilemap のある座標にタイルがあった場合、TilemapToClean (サンプルでは Ground) のタイルマップの同じ座標にタイルがあればnull に置き換えます。

KoalaDungeon Holes の MMTilemapBoolean コンポーネント

KoalaDungeon Holes の MMTilemapBoolean コンポーネント

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

KoalaDungeon Holes タイルマップのタイルの配置

KoalaDungeon Holes タイルマップのタイルの配置

Props (タイルマップではありません)

Props には松明や壺、コインといったマップに配置されるものがまとめられています。
Grid 直下にありますが、Tilemap コンポーネントを持たないため、Grid のマス目の影響は受けません

松明はスプライトのアニメーションを表示する機能であったり、コインはコインが増える処理を行う機能がついていたりと、種類に応じて異なるコンポーネント構成のゲームオブジェクトが配置されています。

Unity TopdownEngine KoalaDungeon の Props の下のゲームオブジェクトは Grid の影響を受けません。

Unity TopdownEngine KoalaDungeon の Props の下のゲームオブジェクトは Grid の影響を受けません。

まとめ

タイルマップを実現するためには Grid, Tilemap, TilemapRenderer コンポーネントが必要でした。
また、壁などの当たり/トリガー判定のための Tilemap に特化したコライダー TilemapCollider2D コンポーネントや、 TopDown Engine 独自のコンポーネントが使われていることもわかりました。

参照サイト Thank You!

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました