はてなブログに投稿しました
Inspectorで表示される変数の文字列に変換する - 青空の月
http://t.co/x6WNE7LhHj
— namagasi (@namagasi048) 2013, 11月 24
上記のブログで紹介されてる関数を使えばプロパティ名などをInspectorで表示されるような
ちょっと見やすい形に整形できるとのこと。
何かの役に立つかな?とのことなのでちょっと考えてみた。
考えてみた。
プロパティ名を手打ちしてまで使うものじゃないなー↓
プロパティを自動取得すれば使えるなー
↓
そのまま列挙すればデバッグ時に便利じゃない?
ToString()でそのオブジェクトの内容を表示できるので
ToString2()みたいな関数を作ってより詳しい内容を表示しよう。
書いてみた。
MonoBehaviourExtensionsってクラスを作成using System; using System.Reflection; using UnityEngine; using UnityEditor; public static class MonoBehaviourExtensions { /// <summary> /// MonoBehaviourを継承したクラスの内容を文字列として返します。 /// </summary> public static string ToString2<T> (this T obj) where T : MonoBehaviour { Type t = typeof(T); var txt = new System.Text.StringBuilder (); // GameObject名を取得 txt.Append (((MonoBehaviour)obj).name); // Get Public Fields FieldInfo[] fields = t.GetFields (); foreach (FieldInfo f in fields) { string fName = ObjectNames.NicifyVariableName (f.Name); string fValue = f.GetValue (obj).ToString (); txt.Append (string.Format (" [{0}:{1}]", fName, fValue)); } return txt.ToString (); } }こんな感じかな?
ポイント
・各クラスに実装するのが面倒だったので拡張メソッドで定義(MonoBehaviourを継承してToStringをOverrideでもいいけど)
・呼び出しクラスのPublicな変数一覧を取得
・変数名と値を取得
・変数名を紹介されてた関数を使って整形
・整形した変数名と値を列挙して返す
使ってみた。
適当なGameObjectにMyScriptという名前でスクリプトを追加using UnityEngine; public class MyScript : MonoBehaviour { public int PublicIntXXX = 10; public string PublicStringABC = "ABC"; public int PublicPropertyIntYYY {get;set;} private int myPrivateIntXXX = 3; void Start () { Debug.Log(this.ToString2()); } }こんな感じで内容を表示したいクラス内でToString2関数を呼ぶだけ。
Debug.Logで使うぐらいしかないけど…。
うまく表示できた。
これは地味に便利かもしれないね。
プロパティやPrivateメンバは省いてる。
PublicFieldメンバだけだと足りないかもしれないから
必要に応じてカスタマイズしよう。
→Unity系記事まとめ