本ページにはプロモーションが含まれます
MemoUnity

【Unity】インスペクタにボタンをつける方法

この記事は約3分で読めます。

インスペクタに独自処理のボタンをつけたい

CustomEditorを使ったことがなかったので、今回簡単にボタンをつけてみることにしました。
ゲームエディタだとこんな感じでインスペクタに拡張がされているのをよく見かけます。
当たり判定の座標などゲーム内で確認調整して、マスタデータに反映するようにしていたのですが、ステージが増えてくると
面倒になってきたのでインスペクタで操作できるスクリプトを作成してみました。

方法

Playmakerの変数と当たり判定のvector2[]を読み書きできるようにしたもの。

[CustomEditor(typeof(ColliderEditor))]
public class ScriptEditor : Editor
{
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        if (GUILayout.Button("[LOAD] ゲームのHitArea反映"))
        {
            ColliderEditor colliderEditorScript = (ColliderEditor)target;
            colliderEditorScript.LoadColliderData(); // ColliderEditorクラスで実装したLoadメソッドを呼ぶ
            EditorUtility.DisplayDialog("Information", "反映されました", "OK"); // 結果ダイアログを表示
        }
        if (GUILayout.Button("[SAVE] DevAnswerの位置とコライダーを保存"))
        {
            ColliderEditor colliderEditorScript = (ColliderEditor)target;
            colliderEditorScript.SaveColliderData(); // ColliderEditorクラスで実装したSaveメソッドを呼ぶ
            EditorUtility.DisplayDialog("Information", "保存されました", "OK"); // 結果ダイアログを表示
        }
    }
}
public class ColliderEditor : MonoBehaviour
{ 
...

OnInspectorGUIメソッド内でDrawDefaultInspectorを呼び出すことで、そのオブジェクトのデフォルトのInspectorを描画し、それに追加のカスタムGUIを追加することができます。

おわりに

ツール系の処理はUNITY_EDITORのみで動くようにしておかないと、リリースに含まれてしまう場合やバグの原因となるので、意識して作る事らしい。