😺

色でデバッグを簡単に―UnityのTileMapでの開発環境の色変更と本番環境の透明化

2023/06/04に公開

概要

UnityのTileMapを活用した開発環境と本番環境の可視化の切り替え法について解説します。
本番環境では透明に、開発環境では任意の色に変更する手法を、具体的なスクリプトとともに紹介します。
これにより、マップの作成や当たり判定箇所の設定、敵のポップ位置の作成等をより効率的に行えるようになります。

やりたいこと

  • UnityのTileMapで本番環境では透明になっていたり、見えないようになっているものを開発環境で可視化をして開発をしやすくしたい

背景

現在 MidraLabでは一プロジェクトで、TopDown 2D RPGを制作しています。
マップ制作において以下の用途でTileMapを使用しています。

  1. マップの作成
  2. 当たり判定箇所の作成
  3. 敵のポップ位置の作成

2,3のTileMapは以下のようなものにしたいと考えています

  • 本番環境では透明になっている
  • 開発環境では可視化して開発をしやすくしたい

これらを実現するために、TileMapのデバッグモードを拡張することにしました。

環境

  • Unity 2022.2.15f1

内容

まず実際のマップは以下のようになっています。
スクリプト適応後のため、それぞれの色は以下に対応しています。

  • 赤: 当たり判定箇所
  • 緑: 敵のポップ位置

これを実現するために、以下のようなスクリプトを作成して特定のTileMapにアタッチしています。
Inspectorでは、Unity Editor実行時に可視化するかどうかのフラグと可視化する際の色を指定できます.

Start()メソッドは、Unityのゲームオブジェクトが有効になったとき、つまりゲームが開始されるときに一度だけ呼び出される関数です。
ここでもTileMapの色を更新しています。この色の更新は、エディタモードと本番モードで分岐しており、本番モードではTileMapを透明に設定します。


public class TilemapDebugger : MonoBehaviour
{
    private Tilemap _tilemap;
    [SerializeField] private bool isViewCollider = true;

    [SerializeField] [Label("デバッグ用TileMap色")]
    private Color debugTileMapColor;

    private void Awake()
    {
        _tilemap = GetComponent<Tilemap>();
    }

#if UNITY_EDITOR
    private void OnValidate()
    {
        if (_tilemap == null) _tilemap = GetComponent<Tilemap>();
        _tilemap.color = isViewCollider ? debugTileMapColor : new Color(1f, 1f, 1f, 0f);
    }
#endif

    private void Start()
    {
#if UNITY_EDITOR
        _tilemap.color = isViewCollider ? debugTileMapColor : new Color(1f, 1f, 1f, 0f);
#else
        _tilemap.color = new Color(1f, 1f, 1f, 0f);
#endif
    }

結論

Start() メソッドは、Unityのゲームオブジェクトが有効になったとき、つまりゲームが開始されるときに一度だけ呼び出される関数です。

MidraLab(ミドラボ)

Discussion