見出し画像

UnityのTilemap 徹底まとめ⑦ | Isometric Z as Y Tilemapで高さ・段差を作る

今回は、Unityの Isometric Z as Y Tilemap を使って、Tilemapに高さや段差を持たせる方法の解説です。

前回までに、Isometric Tilemapで地面とオブジェクトを分ける方法、当たり判定の付け方、プレイヤーが木や壁の前後を回り込む表示順について確認しました。

今回はそこから一歩進めて、Tilemapに 高さの層 を持たせる方法を見ていきます。

通常のIsometric Tilemapでは、斜め上から見たようなマップを作ることはできますが、タイルそのものに高さを持たせるわけではありません。
高さを扱いたい場合は、Isometric Z as Y Tilemap を使います。

Isometric Z as Yでは、タイルの Z座標 を使って高さを表現できます。



Isometric Z as Yとは

Isometric Z as Yは、名前の通り、Z方向の値をY方向の見た目に反映するTilemap です。
通常の2Dでは、XとYの平面上にタイルを並べます。
しかし、Isometric Z as Yでは、そこにZ方向の高さを加えることができます。

イメージとしては、次のようになります。

つまり、Tilemapを上に動かすのではなく、タイルを配置するときのZ座標を変える ことで高さを作ります。


高さのあるTilemapの作成

1,Grid を Isometric Z as Y で作成

まず、親のGridを確認します。

Hierarchyで Grid を選択し、InspectorのGridコンポーネントを確認します。

通常のIsometric Tilemapではなく、Isometric Z as Y を選ぶことが重要で、高さを使いたい場合は、最初からこの形式でTilemapを作るのが基本です。

途中で変更することも可能ですが、通常のIsometricとIsometric Z as Yでは、Z座標の扱いが変わるため、すでに配置済みのタイルが思った位置に表示されないことがあります。


Tilemap自体のTransform Zは0のまま

ここで間違いやすいのが、TilemapオブジェクトそのもののZ座標です。
たとえば、1段高いTilemapを作りたいからといって、Gridに別のTilemapを作って、そのz座標を 1つ大きくするわけではありません。

Tilemapオブジェクト自体の座標は、基本的にすべて同じでも問題ありません。

高さを指定するのは、TilemapオブジェクトのTransformではなく、Tile Palette / Brush側のZ座標 です。


2,Tilemap Renderer を Individualにする

Isometric Z as Yで高さを使う場合は、Tilemap RendererのModeを Individual にします。

特に、1つのTilemapの中でZ座標を変えながら、

  • Z = 0 の地面

  • Z = 1 の高い地面

  • Z = 2 のさらに高い地面

のように階層を作る場合は、タイルごとの表示順が重要になります。

Chunkのままだと、タイルをまとめて描画するため、段差や高台の前後関係が思った通りにならないことがあります。

Individualにすると、タイルを個別に描画順の対象として扱えるため、Isometric Z as Yの高さ表現や前後関係を確認しやすくなります。


3,Transparency Sort ModeをCustom Axisにする

Isometric Z as Yでは、表示順の設定も重要です。

通常の2Dでは、Y座標をもとに「奥にあるものを先に描画し、手前にあるものを後に描画する」という考え方を使います。
ただし、Isometric Z as Yでは、Z方向の高さも表示順に影響させる必要があります。
そのため、Transparency Sort Modeを Custom Axis にします。

ここでは Unity 6.3 + URP 環境での設定方法を説明します。

Built-in を使用している場合、Project Settings > Graphics のBuilt-In側にTransparency Sort Mode を Custom Axis に設定すれば対応可能でした。

今回の環境では、Graphics画面に次のような警告が出ていました。

A Scriptable Render Pipeline is in use.
Settings in the Built-In Render Pipeline are not currently in use.

つまり、URPを使っているため、Built-In側のGraphics設定を変更しても反映されません。

Unity 6.3 + URP + Renderer2D の環境では、Renderer2D Dataアセット側 でTransparency Sortを設定します。

今回の手順は次の通りです。

Projectウィンドウで、UniversalRP を探します。
Inspectorで Renderer List を探すと Renderer2D があります。

この Renderer2D を開くと、Renderer 2D DataのInspectorが表示されます。
そこで、General内の設定を次のようにします。

Transparency Sort Mode:Custom Axis
Transparency Sort Axis:X 0 / Y 1 / Z -0.26

他のUnityバージョンでの補足


Unityのバージョンやレンダーパイプラインによって、設定場所が異なる場合があります。
Built-In Render Pipelineを使っている場合や、別のバージョンのUnityでは、次の場所から設定するケースがあります。

Edit
→ Project Settings
→ Graphics
→ Camera Settings
→ Transparency Sort Mode

そこで、

Transparency Sort Mode:Custom Axis
Transparency Sort Axis:X 0 / Y 1 / Z -0.26

を設定します。


なぜ Z を -0.26 にするのか

Transparency Sort Axisの設定は、描画順を決めるための基準です。

X 0
Y 1
Z -0.26

にすると、基本的にはY座標をもとに表示順を決めつつ、Z方向の高さも少し考慮するようになります。
Zが0のままだと、高さの違いが表示順にうまく反映されないことがあります。
反対に、Zの影響を強くしすぎると、高さが表示順に効きすぎて、横位置や奥行きとの関係が崩れることがあります。

そのため、まずはUnityのマニュアルでも使われている -0.26 を基準にします。

ここで大事なのは、Z = -0.26 にしたからといって、タイルが上に持ち上がるわけではないということです。
この設定は、高さを作る設定ではなく、高さを含めた表示順を整える設定 です。

高さを作るのは、次に説明する Scene View Z Position です。


4,Scene View Z Positionで高さを変えて描く

実際にタイルの高さを変えるには、Tile Palette側の設定を使います。

Tile Paletteの下部に、次のような項目があります。

  • Lock Z Position

  • Scene View Z Position

  • Palette Z Position

1, Lock Z Position のチェックを外す。

2,Scene View Z Positionを変更する。
例:

Scene View Z Position = 0
→ 一番下の地面

Scene View Z Position = 1
→ 少し高い位置

Scene View Z Position = 2
→ さらに高い位置

3,Lock Z Position にチェックを入れてタイルを描く

階層ごとに1~3を繰り返すことで、高さに違いのあるマップができます。
これで同じTilemapの中でも高さの違うタイルを配置できます。

つまり、Isometric Z as Yでは、1つのTilemapだけでも段差のあるマップを作ることができます。

上のサンプルでは1つのタイルマップで段差のあるマップを作るそうで井出ご説明しました。
しかし、複数のTilemapでそれぞれの高さを持った階層を作ると管理がしやすくなります。


Isometric Z as Y 使用上のポイント

高さの見た目は素材によって変わる

素材によっては、Scene View Z Positionを1にすると、見た目としては半段くらい上がったように見える場合もあります。
これは異常ではありません。

Isometric Z as YのZ値と、素材の見た目上の高さが、必ず1対1で一致するとは限らないためです。

素材によっては、

  • Z = 1 → 半段くらいに見える

  • Z = 2 → 1段分に見える

ということもあります。

そのため、実際の制作では、使用しているタイル素材に合わせて、

  • この素材ではZ=1を1段として使う

  • この素材ではZ=2を1段として使う

というように決める必要があります。


段差の側面タイルも必要

Z座標を変えて高い位置に床タイルを描くと、高い場所の上面は作れます。
ただし、それだけだと、床が浮いているように見えたり、段差の境目が不自然になったりします。
段差として見せるには、次の3つを組み合わせます。

  • Z=0 の地面

  • Z=1 または Z=2 の高い地面

  • 段差の側面タイル

上面のタイルだけでなく、側面の壁や崖のタイルを配置することで、高台や段差として自然に見えるようになります。


当たり判定は自動で段差になるわけではない

Isometric Z as Yで見た目の高さを作っても、Tilemap Collider 2Dが自動で、「1Fを歩いているプレイヤーが、1段高い場所にぶつかる」という段差判定を作ってくれるわけではありません。

Z as Yは、主に 見た目の高さ表示順 のための仕組みです。
2D物理の当たり判定は、基本的にXY平面上のColliderとして扱われます。

そのため、

  • Z=0の床

  • Z=1の床

  • Z=2の床

があっても、プレイヤーが自動的に「今はZ=0にいるからZ=1には入れない」と判断してくれるわけではありません。
段差として通れない場所を作りたい場合は、別途ルールを作ります。

たとえば、

  • 高台の側面にColliderを置く

  • 階段部分だけColliderを置かない

  • プレイヤーが階段に入ったら高さを切り替える

  • 現在の高さが違う場所には移動できないようにする

といった考え方です。

つまり、

  • 見た目の高さ → Isometric Z as Y

  • 表示順 → Transparency Sort Axis

  • 通れる・通れない → Colliderやプレイヤー側の高さ管理

というように分けて考えます。


今回のまとめ

今回は、Isometric Z as Y Tilemapで高さを表現する考え方を確認しました。

ポイントは大きく分けると、次の4つです。

1. 高さを使うなら Isometric Z as Y を使う

通常のIsometric Tilemapではなく、Isometric Z as Y を使うことで、Z座標を高さとして扱えるようになります。

Tilemapオブジェクト自体のTransform Zを動かすのではなく、Tile PaletteのScene View Z Positionを変えてタイルを描くのが基本です。

1つのTilemapでも、Z位置を変えれば高さ違いのタイルを配置できます。

2. 表示順の設定も必要

Isometric Z as Yで高さを扱う場合は、表示順の設定も重要です。
Tilemap RendererのModeは、まず Individual にしておくと扱いやすくなります。
また、Unity 6.3 + URPでは、Renderer2D Data側でTransparency Sort Modeを設定します。
基本設定は次の通りです。

Transparency Sort Mode:Custom Axis
Transparency Sort Axis:X 0 / Y 1 / Z -0.26

この Z = -0.26 は、タイルを高くするための設定ではありません。
Y座標を基準にしつつ、Z方向の高さも表示順に反映させるための設定です。

3. 高さの見え方は素材によって変わる

Scene View Z Positionを1にしたからといって、必ず1段分の高さに見えるとは限りません。
素材によっては、

Z = 1 → 半段くらい
Z = 2 → 1段分

のように見えることもあります。

4. 見た目の高さと当たり判定は別

Isometric Z as Yで高さを作っても、Tilemap Collider 2Dが自動で段差判定を作ってくれるわけではありません。

Z as Yは、主に 見た目の高さ表示順 のための仕組みです。

通れる場所、通れない場所、高さの切り替えは、Colliderやプレイヤー側のスクリプトで別に管理します。


▼ Unity初心者向け記事まとめはこちら


こちらのマガジン「ミニゲーム作成講座 全8回セット」でもシーンの切り替えなどを活用して、初心者でも知識ゼロから作れるミニゲーム作成講座を紹介しています。

さらにステップアップの「スマホで遊ぶジャンプゲーム 8回セット」のマガジンもぜひご活用ください。


ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

いいなと思ったら応援しよう!

ファイブボックス よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!