ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - Inspector を整理するためにエディタAPIを使用する -

初めに

 Inspector を整理する方法として、エディタAPIをし、EditorGUILayout を利用する方法があります。その方法をまとめます。

エディタAPIを使用する手順

 エディタAPIを使用するための手順は以下になります。

  1. Projectビューで「Editor」フォルダを作成
  2. エディタ拡張用のスクリプトC#スクリプト)を「Editor」フォルダ配下に作成
  3. 2のスクリプトに実装したい機能の処理を記述

 今回は "InspectorScript" という名前のスクリプトの Inspector を "InspectorEditor" という名前のスクリプトで整理します。"InspectorEditor" が Editor フォルダに入れるスクリプトになります。

EditorGUILayout を使い、いろいろ追加する

 EditorGUILayout を利用することでいろいろ追加できます。

 いくつかピックアップして追加するスクリプトを乗せておきます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

//()の中にクラス名を入力
//今回は InspectorScript と記入
[CustomEditor(typeof(InspectorScript))]
public class InspectorEditor : Editor
{
    //OnInspectorGUIでカスタマイズのGUIに変更する
    public override void OnInspectorGUI()
    {
        //元のInspector部分(InspectorScriptのInspector)を表示する
        base.OnInspectorGUI();

        //スペースを追加
        GUILayout.Space(20);

        //元のInspector部分の下に表示
        //ボタンを表示
        if (GUILayout.Button("ボタン"))
        {
            Debug.Log("ボタンを押したよ");
        }

        //ポップアップの追加
        string[] options = new string[] {"Hp", "Mp", "Attack"};
        //EditorGUILayout.Popup(int, string[]);
        //第1引数は最初に表示するポップアップの string
        //第2引数はポップアップに表示する文字列
        EditorGUILayout.Popup(0, options);

        //Toggleの追加
        //第1引数は表示するText
        //第2引数は初期値がtrueかfalseか
        EditorGUILayout.Toggle("Toggle", true);

        //カラーを追加
        EditorGUILayout.ColorField("カラー", Color.white);

        //Vector3 を入力する X 、 Y と Z のフィールドを追加
        EditorGUILayout.Vector3Field("Vector3", Vector3Int.zero);
    }
}

(結果)

 Name は元のスクリプト(InspectorScript)に記述していたものになります。base.OnInspectorGUI(); を消すと、表示されないくなります。


 他にも TextArea や Slider などさまざまなものを追加できます。下記リンク先に一覧がありますので、そちらを参照してください。なお、それぞれの Static 関数をクリックするとそれぞれの説明が見れます。引数などが分からない場合はそちらをご覧ください。
docs.unity3d.com

Inspector の項目ごとに色を変える

 色を変える方法は3つあります。

  • GUI.color
  • GUI.backgroundColor
  • GUI.contentColor

 GUI.backgroundColor は背景色だけ、GUI.contentColor はアイコンなどの色だけ、GUI.color は全部の色を設定します。

GUI.color)

GUI.color = Color.red;
EditorGUILayout.TextField("Text1", "全部");

GUI.backgroundColor)

GUI.backgroundColor = Color.green;
EditorGUILayout.TextField("Text1", "背景色のみ");

GUI.contentColor)

GUI.contentColor = Color.green;
EditorGUILayout.TextField("Text1", "中身のみ");

 自分が見やすいものを使用しましょう。

最後に

 Editor 内に自分がよく使うエディタAPI をまとめたスクリプトを置いておくと、いつでも使えて便利かもしれません。