LoginSignup
1
1

More than 5 years have passed since last update.

楽してInspectorに任意の表示を追加したかった

Posted at

環境

 この記事ではUnity5.3.2f1を使用しています。

前書き

 何かしらInspector上で表示させたい値があるけど対象のクラス毎に専用のCustomEditorを書くのも億劫だったので極力楽に実現できる手段を調べました。

手順

MonoBehaviorを拡張する

 MonoBehaviorを継承するクラスを作成し、表示データ取得用のメソッドを追加する。
 クラス名はCustomMonoBehaviorとしておく。

CustomMonoBehaviour.cs
using UnityEngine;

public abstract class CustomMonoBehaviour : MonoBehaviour {
    public abstract string GetCustomInspectData();
}

CustomMonoBehaviorを対象とするEditorクラスを作成する

 CustomEditor属性の第二引数をtrueにすると、CustomMonoBehaviorを継承するクラスも対象となる。
 クラス名はCustomMonoBehaviourInspctorとしておく。
 ※このスクリプトはEditorフォルダ内に配置すること。でないとビルド出力時にエラーが発生する。

CustomMonoBehaviourInspctor.cs
using UnityEditor;

[CustomEditor(typeof(CustomMonoBehaviour), true)]
public class CustomMonoBehaviourInspctor : Editor {
    public override void OnInspectorGUI() {
        DrawDefaultInspector(); // デフォルトの表示内容
        EditorGUILayout.TextArea((target as CustomMonoBehaviour).GetCustomInspectData()); // 追加表示分
    }
}

任意のスクリプトにCustomMonoBehaviorを適用する

 CustomMonoBehaviourを継承し、GetCustomInspectDataを表示させたいデータを出力するよう実装する。
 クラス名はHogeScriptとしておく。

HogeScript.cs
public class HogeScript : CustomMonoBehaviour {
    public override string GetCustomInspectData() {
        return transform.position.ToString();
    }
}

結果

 下図のようにinspector上でのHogeScriptの表示内容が追加される。
customEditor.png

あとがき

  • クラスを拡張するよりインタフェースを使ったほうが便利じゃね? と思いましたが CustomEditorでインタフェースを対象にしてもOnInspectorGUIが動かないのでダメでした。
  • 単純な文字列や数値を表示したいだけならpublic変数に値を突っ込んでおいた方が楽です。(汚いけど)
1
1
0

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
1
1