Home

Awesome

UniDebugMenu

横向きかつクリックやタップ可能なゲームで使用できるカスタマイズ可能なデバッグメニュー

機能

バージョン

サンプル

トップ画面

システム情報

システムコマンド

ゲームオブジェクト一覧

ログ情報

3種類のメニュー表示を使用可能

テキスト表示

ボタン表示

カスタマイズ可能なボタン表示

大量のデータを実装可能

多階層のメニューを実装可能

検索可能

カテゴリ分け可能

トースト表示

ドラッグ可能な開くボタン

どこからでも開ける

複数解像度対応

18:9

4:3

使い方

デバッグメニューを呼び出すサンプル

using UnityEngine;
using UnityEngine.SceneManagement;

namespace UniDebugMenu.Example
{
    /// <summary>
    /// デバッグメニューのサンプルを管理するクラス
    /// </summary>
    public sealed class UniDebugMenuExampleScene : MonoBehaviour
    {
        //==============================================================================
        // 変数
        //==============================================================================
        private ExampleTopListCreator m_creator;

        //==============================================================================
        // 関数
        //==============================================================================
        /// <summary>
        /// 初期化される時に呼び出されます
        /// </summary>
        private void Awake()
        {
            // デバッグメニューのトップ画面のリストを管理するインスタンスを作成します
            m_creator = new ExampleTopListCreator();
            m_creator.Init();

            // デバッグメニューのシーンを加算で読み込みます
            SceneManager.LoadScene( "UniDebugMenuScene", LoadSceneMode.Additive );

            // デバッグメニューでコマンドが実行された時に呼び出されます
            UniDebugMenuScene.mOnChange += () => Debug.Log( "UniDebugMenuScene.mOnChange" );

            // DM ボタンが押された時にデバッグメニューのトップ画面を開くように設定します
            UniDebugMenuScene.mOnOpen += () => DMType.BUTTON_COL_3.Open( m_creator );
        }

        /// <summary>
        /// デバッグメニューを開くボタンが押された
        /// </summary>
        public void OnClick1()
        {
            // デバッグメニューのトップ画面を開きます
            DMType.BUTTON_COL_3.Open( m_creator );
        }

        /// <summary>
        /// システムコマンドの画面を開くボタンが押された
        /// </summary>
        public void OnClick2()
        {
            // デバッグメニューのシステムコマンドの画面を開きます
            DMType.COMMAND_TAB_6.Open( new SystemCommandListCreator() );
        }

        /// <summary>
        /// デバッグメニューを開く DM ボタンを透明にするボタンが押された
        /// </summary>
        public void OnClick3()
        {
            // DM ボタンを透明にします
            // DM ボタンは透明になるだけで当たり判定は有効のままになります
            // true:不透明 false:透明
            UniDebugMenuScene.SetOpenButtonVisible( false );
        }

        /// <summary>
        /// デバッグメニューを削除するボタンが押された
        /// </summary>
        public void OnClick4()
        {
            // デバッグメニューのゲームオブジェクトを削除します
            if ( UniDebugMenuScene.Destroy() )
            {
                // デバッグメニューのゲームオブジェクトが削除できた場合は
                // デバッグメニューのシーンもアンロードします
                SceneManager.UnloadSceneAsync( "UniDebugMenuScene" );
            }
        }
    }
}

リストを作成するサンプル

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

namespace UniDebugMenu.Example
{
    /// <summary>
    /// デバッグメニューのトップ画面のリストを作成するクラス
    /// </summary>
    [Serializable]
    public sealed class ExampleTopListCreator : ListCreatorBase<ActionData>, IDisposable
    {
        //==============================================================================
        // 変数(readonly)
        //==============================================================================
        private readonly ActionData[] m_sourceList;

        // ログ情報のリストを作成するインスタンス
        private readonly LogListCreator m_logDataCreator = new LogListCreator( 1500 );

        //==============================================================================
        // 変数
        //==============================================================================
        private IList<ActionData> m_list;

        //==============================================================================
        // プロパティ
        //==============================================================================
        public override int Count => m_list.Count;

        public override ActionData[] OptionActionList => new []
        {
            new ActionData( "ボタン1"   , () => Debug.Log( "ボタン1が押されました" ) ),
            new ActionData( "ボタン2"   , () => Debug.Log( "ボタン2が押されました" ) ),
            new ActionData( "ボタン3"   , () => Debug.Log( "ボタン3が押されました" ) ),
            new ActionData( "ボタン4"   , () => Debug.Log( "ボタン4が押されました" ) ),
            new ActionData( "ボタン5"   , () => Debug.Log( "ボタン5が押されました" ) ),
        };

        //==============================================================================
        // 関数
        //==============================================================================
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public ExampleTopListCreator()
        {
            m_sourceList = new []
            {
                new ActionData( "テキスト表示サンプル"      , () => OpenAdd( DMType.TEXT_TAB_6      , new TextListCreatorExample() ) ),
                new ActionData( "ボタン表示サンプル 2列"    , () => OpenAdd( DMType.BUTTON_COL_2    , new TextListCreatorExample() ) ),
                new ActionData( "ボタン表示サンプル 3列"    , () => OpenAdd( DMType.BUTTON_COL_3    , new TextListCreatorExample() ) ),
                new ActionData( "システム情報"              , () => OpenAdd( DMType.TEXT_TAB_6      , new SystemInfoListCreator() ) ),
                new ActionData( "システムコマンド"          , () => OpenAdd( DMType.COMMAND_TAB_6   , new SystemCommandListCreator() ) ),
                new ActionData( "ゲームオブジェクト一覧"    , () => OpenAdd( DMType.COMMAND_TAB_6   , new GameObjectListCreator() ) ),
                new ActionData( "ログ情報"                  , () => OpenAdd( DMType.TEXT_TAB_6      , m_logDataCreator ) ),
            };
        }

        /// <summary>
        /// 初期化します
        /// </summary>
        public void Init() => m_logDataCreator.Init();

        /// <summary>
        /// 破棄します
        /// </summary>
        public void Dispose() => m_logDataCreator.Dispose();

        /// <summary>
        /// リストの表示に使用するデータを作成します
        /// </summary>
        protected override void DoCreate( ListCreateData data )
        {
            m_list = m_sourceList
                .Where( c => data.IsMatch( c.m_text ) )
                .ToArray()
                .ReverseIf( data.IsReverse )
            ;
        }

        /// <summary>
        /// 指定されたインデックスの要素の表示に使用するデータを返します
        /// </summary>
        protected override ActionData DoGetElemData( int index ) => m_list.ElementAtOrDefault( index );
    }
}

ライセンス