はじめに
本記事はサムザップ Advent Calendar 2017の23日目の記事です。
昨日は noguchi_toma さんのパケットキャプチャツール/Charlesを試してみたでした!
※ 【Unity】SRDebuggerの使い方と拡張方法の紹介の補足記事でもあります。
SRDebugger
- 実機でコンソールログを確認したい
- 実機でプロファイラーを確認したい
- 特定の状態を再現するためにキャラクターのステータスなどを変更したい
上記のような機能が必要になる場面は多々あると思います。
それらの要望を手軽に実現出来るアセットがSRDebugger - Console & Tools On-Deviceです。
実機でコンソールログを確認する
実機でプロファイラーを確認する
オプションタブにデバッグ機能を実装する
タブの拡張方法
今回は独自のオプションタブを例に作成します。
オリジナルオプションタブのプレハブ作成
Assets > StompyRobot > SRDebugger > Resources > SRDebugger > UI > Prefabs > Tabs > Options.prefab
を選択して複製(Ctrl + D)して、複製したプレハブ名をOriginalOptionsにリネームします。
SRTabコンポーネントのパラメータ編集
SRTabのTitleとKeyをOriginalOptionsにします。
一度SRDebuggerを起動してみると既にOriginalOptionsタブが追加されていることが確認出来ます。
ですが、Optionsタブに追加したデバッグ機能を参照していて独自のオプションとしてはまだ機能していません。
OriginalSROptionsスクリプトの作成
Assets > StompyRobot > SRDebugger > Scripts > SROptions.cs
を選択して複製(Ctrl + D)して、複製したスクリプト名をOriginalSROptionsにリネームします。
スクリプトを開き、先頭の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を作成します。
スクリプトを開き、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コンポーネントに差し替えます。
タブの拡張は以上で完了です。
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
}
実行結果
参考記事
【Unity】オブジェクトにアタッチされているスクリプトを Inspector でドラッグ&ドロップして置き換える方法
おわりに
SRDebuggerは導入の手軽さと拡張性の高さを兼ね備えた素晴しいアセットです。
興味を惹かれた方はお手に取ってみてはいかがでしょうか。
明日のサムザップ Advent Calendar 2017は ninomiya_shota さんの波動に渦に!極座標移動による回転拡縮シェーダーを作ってみたです!