UnityでSRDebuggerを使ってデバッグをする際に、特定のシーンやタイミングでのみ使いたいオプションなどがあったり、オプションの表示順をいろいろあれこれしたい時にOptionContainersを利用したら割とお手軽に調整できたのでメモ
OptionContainers
OprionContainersはC#のObject単位でオプションのプロパティやメソッド群を管理するものです
以下は公式のページより引用したものです
SRDebugger公式サイト
今回は以下のようにベースクラスを作りました
/// <summary>
/// 各カテゴリーのオプション群のベースクラス
/// </summary>
public class OptionsBase<T> where T : class, new()
{
private static T _current;
public static T Current => _current ?? (_current = new T());
/// <summary>
/// 全オプションに必要そうなオブジェクト
/// </summary>
protected DataObject _dataObject;
protected DataObject DataObject
{
get
{
if (_dataObject == null)
{
//初期処理
}
return _dataObject;
}
}
}
後はベースに従ってカテゴリ単位で表示するオプション群を指定します(別にカテゴリ単位でなくてもよい)
/// <summary>
/// 特定のカテゴリのデバッグオプション
/// </summary>
public class TestOptions : OptionsBase<TestOptions>
{
/// <summary>
/// カテゴリー名
/// </summary>
private const string CATEGORY_TEST = "カテゴリ名";
/// <summary>
/// PlayerPrefsきれいにしたり
/// </summary>
[Category(CATEGORY_TEST)]
[SROptions.DisplayName("PlayerPrefs削除")]
[SROptions.SortAttribute(0)]
public void DeletePlayerPrefs
{
PlayerPrefs.DeleteAll();
}
}
そしてこれらを任意のタイミングでオプションパネルに追加したり削除したりします
private void Start()
{
// 開始時にオプションを表示
SRDebug.Instance?.AddOptionContainer(TestOptions.Current);
}
private void OnDestroy()
{
// シーン破棄時にオプションを非表示
SRDebug.Instance?.RemoveOptionContainer(TestOptions.Current);
}
本来カテゴリ単位でのソートはSRDebuggerに用意されてない(されてたら指摘してください)のですが、追加の順序などを制御することで任意の場所に置くことができます
これに従って裏でAttributeを拡張すれば表示順を結構自由にいじれそうですし、一度作ってみると楽かもしれません