LoginSignup
26
11

More than 5 years have passed since last update.

【Unity】SRDebuggerのタブの拡張方法

Last updated at Posted at 2017-12-21

はじめに

本記事はサムザップ Advent Calendar 2017の23日目の記事です。

昨日は noguchi_toma さんのパケットキャプチャツール/Charlesを試してみたでした!

【Unity】SRDebuggerの使い方と拡張方法の紹介の補足記事でもあります。

SRDebugger

  • 実機でコンソールログを確認したい
  • 実機でプロファイラーを確認したい
  • 特定の状態を再現するためにキャラクターのステータスなどを変更したい

上記のような機能が必要になる場面は多々あると思います。
それらの要望を手軽に実現出来るアセットがSRDebugger - Console & Tools On-Deviceです。

2017-12-02_19h49_04.png

実機でコンソールログを確認する

ss2.gif

実機でプロファイラーを確認する

ss3.gif

オプションタブにデバッグ機能を実装する

ss4.gif

タブの拡張方法

今回は独自のオプションタブを例に作成します。

オリジナルオプションタブのプレハブ作成

Assets > StompyRobot > SRDebugger > Resources > SRDebugger > UI > Prefabs > Tabs > Options.prefabを選択して複製(Ctrl + D)して、複製したプレハブ名をOriginalOptionsにリネームします。

2017-12-21_17h24_33.png

SRTabコンポーネントのパラメータ編集

2017-12-21_17h51_01.png

SRTabのTitleとKeyをOriginalOptionsにします。
一度SRDebuggerを起動してみると既にOriginalOptionsタブが追加されていることが確認出来ます。
ですが、Optionsタブに追加したデバッグ機能を参照していて独自のオプションとしてはまだ機能していません。

2017-12-21_18h04_04.png

OriginalSROptionsスクリプトの作成

Assets > StompyRobot > SRDebugger > Scripts > SROptions.csを選択して複製(Ctrl + D)して、複製したスクリプト名をOriginalSROptionsにリネームします。

2017-12-21_17h24_34.png

スクリプトを開き、先頭のdelegateを削除、SROptionsになっている箇所をOriginalSROptionsに書き換えます。

public partial class OriginalSROptions
{
    private static readonly OriginalSROptions _current = new OriginalSROptions();

    public static OriginalSROptions Current
    {
        get { return _current; }
    }

    public event SROptionsPropertyChanged PropertyChanged;
#if UNITY_EDITOR
    [JetBrains.Annotations.NotifyPropertyChangedInvocator]
#endif
    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, propertyName);
        }
    }
}

OriginalOptionsTabControllerコンポーネントの作成

Assets > StompyRobot > SRDebugger > Scripts > UI > TabsにOriginalOptionsTabController.csを作成します。

2017-12-21_18h53_18.png

スクリプトを開き、OptionsTabControllerコンポーネントを継承します。
Startイベントメソッドをオーバーライド、PopulateメソッドをOriginalSROptionsを参照するように基底クラスのメソッドを隠蔽して実装します。

using System.Collections.Generic;
using SRDebugger.Internal;


namespace SRDebugger.UI.Tabs
{
    public class OriginalOptionsTabController : OptionsTabController
    {
        protected override void Start()
        {
            PinButton.onValueChanged.AddListener(SetSelectionModeEnabled);
            PinPromptText.SetActive(false);
            Populate();
        }

        protected new void Populate()
        {
            var sortedOptions = new Dictionary<string, List<OptionDefinition>>();

            foreach (var option in SRDebuggerUtil.ScanForOptions(OriginalSROptions.Current))
            {
                // Find a properly list for that category, or create a new one
                List<OptionDefinition> memberList;

                if (!sortedOptions.TryGetValue(option.Category, out memberList))
                {
                    memberList = new List<OptionDefinition>();
                    sortedOptions.Add(option.Category, memberList);
                }

                memberList.Add(option);
            }

            var hasCreated = false;

            foreach (var kv in sortedOptions)
            {
                if (kv.Value.Count == 0)
                {
                    continue;
                }

                hasCreated = true;
                CreateCategory(kv.Key, kv.Value);
            }

            if (hasCreated)
            {
                NoOptionsNotice.SetActive(false);
            }
        }
    }
}

オリジナルオプションタブのプレハブに作成したコンポーネントをアタッチ

Assets > StompyRobot > SRDebugger > Resources > SRDebugger > UI > Prefabs > Tabs > OriginalOptions.prefabを選択してOptionsTabControllerコンポーネントをOriginalOptionsTabControllerコンポーネントに差し替えます。

タブの拡張は以上で完了です。

ss1.gif

InspectorのモードをNormalからDebugに変更することで、同名のメンバ変数のパラメータを引き継いでコンポーネントを差し替えることが出来ます。

オリジナルオプションタブにデバッグ機能を実装する

デバッグ機能の実装

using UnityEngine;
using System.ComponentModel;


/// <summary>
/// 独自のデバッグ機能
/// </summary>
public partial class OriginalSROptions
{
    #region 定数

    /// <summary>
    /// オリジナルカテゴリ
    /// </summary>
    private const string OriginalCategory = "Original";

    #endregion


    #region デバッグ機能

    [Category(OriginalCategory)]
    [DisplayName("ポーズ")]
    [SROptions.Sort(0)]
    public void Pause()
    {
        Time.timeScale = 0f;
    }

    #endregion
}

実行結果

ss2.gif

参考記事

【Unity】オブジェクトにアタッチされているスクリプトを Inspector でドラッグ&ドロップして置き換える方法

おわりに

SRDebuggerは導入の手軽さと拡張性の高さを兼ね備えた素晴しいアセットです。
興味を惹かれた方はお手に取ってみてはいかがでしょうか。

明日のサムザップ Advent Calendar 2017ninomiya_shota さんの波動に渦に!極座標移動による回転拡縮シェーダーを作ってみたです!

26
11
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
11