名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

ScriptableObjectでデバッグモードのON/OFFを切り替えてみる

みなさん、こんにちは!SAT-BOXのツバメです。

今回は、普段チームで開発している時に使用している自作したデバッグ処理のON/OFF機能を実装方法を紹介しようと思います。
実装理由は、チーム内では個人でデバッグ用の機能を作成する人もいますが、製品版としてゲームをリリースする場合、処理を消すのが面倒なためこの機能を実装しました。

1.なんでScriptableObjectなのか?

大きな理由としては、「共有データとして持つため」「管理が簡単」の2点の理由で使用しています。プログラマー以外の人でも触りやすいというのも一番のポイントですね。

2.さっそく実装!

まず、最初にScriptableObjectとしてデータを持っておく部分の作成をします。

using UnityEngine;

[CreateAssetMenu(menuName = "Debug_ON_OFF_Data")]
public class Debug_ON_OFF_Data : ScriptableObject
{
    public bool debugMode;
}

スクリプトを作成して、上記の処理を追加することで作成できます。
ここにデータを追加すればON/OFFの項目を増やすことができます。

[CreateAssetMenu(menuName = "Debug_ON_OFF_Data")]

この処理でProjectのCreateから作成できるようにもしています。
早速作成してみます!

f:id:sat-box:20200203180357p:plain

このような感じでInspectorに表示されるかと思います。
ここのチェックを切り替えることでデバッグのON/OFFが出来るようになっています。
しかし、これだけだと外部からデバッグがONなのかOFFなのかが分からないので少し処理を書きます。

3.外部からデバッグON/OFFが分かるように処理を作成

using UnityEngine;

public class Debug_ON_OFF : MonoBehaviour
{
    /// <summary>
    /// Debug_ON_OFF_Dataのアセットデータ
    /// </summary>
    private static Debug_ON_OFF_Data asset;

    /// <summary>
    /// ScriptableObjectのデータ名
    /// </summary>
    private static readonly string DATA_NAME = "Debug_ON_OFF_Data";

    /// <summary>
    /// デバッグ種類
    /// </summary>
    public enum DebugType
    {
        /// <summary>
        /// デバッグモード
        /// </summary>
        DebugMode,
    }

    /// <summary>
    /// デバッグ機能のON/OFFを取得
    /// </summary>
    /// <param name="_debugType"></param>
    /// <returns></returns>
    public static bool GetDebugActive(DebugType _debugType)
    {
        // Debug_ON_OFF_Dataを取得
        asset = Resources.Load(DATA_NAME) as Debug_ON_OFF_Data;

        // アセットが無い場合
        if (asset == null)
            return false;

        switch (_debugType)
        {
            case DebugType.DebugMode: return asset.debugMode;

            default: return false;
        }
    }
}

新しくスクリプトを追加して処理を書きました。
やっていることは単純でAssetsからデバッグのデータを取得して、
データがどうなっているかBool型で返しているだけで
す。
これで、外部からデバッグ機能がどうなっているか呼べるようになりました。
static型なので基本どこからでも呼べます。

4.表示方法も頑張るとこうなる

今回はデバッグ機能のON/OFF機能の実装だけを紹介しましたが、
表示もこだわり始めるとこんな感じにできます。

f:id:sat-box:20200203181059p:plain

エディター拡張の[EditorWindow]を使用して実装しています。
どういったものかは皆さんの方で調べてみてください。
(今後のブログで時間があれば書くかもしれないです)

以上、ツバメでした!