【Unity】エディター拡張方法をまとめます!
Unityエディターの拡張方法をまとめます。
基本的な使い方
MonoBehaviourを継承したクラスで宣言された変数をUnityエディターで編集できるようにするには以下の2パターンのどちらかを満たす必要があります。
- パブリック(public)なフィールド
- UnityEngine.SerializeField属性を付加したフィールド
using System.Collections.Generic;
using UnityEngine;
public class TestScript : MonoBehaviour
{
public int publicInt; // 1
[SerializeField]
private int privateInt; // 2
}
インスペクター上でパラメーターを編集できるようになります。
組み込み型
組み込み型の対応状況とインスペクター上の見え方についてまとめます。
符号付き整数型
符号付き整数型の sbyte short int long は全て対応されています。
符号なし整数型
符号なし整数型の byte ushort uint ulong は全て対応されていますが、
ulongのエディター表示がバグなのか仕様なのか分かりませんが、符号付きのlongと同じ表示になります。
浮動小数点型
浮動小数点型は float double は対応されていますが、decimalは未対応です。
Min属性を付加することで最小値を設定できます。
以下の例ではマイナス値を受け付けないプラス値の浮動小数を表現できます。
public float positiveFloat;
論理型
論理型の bool はチェックボックス表示になります。
文字型
文字型の char は1文字のみ受け付けます。
文字列型
文字列型の string は標準で1行のみ受け付けます。
TextArea属性を付けると複数行表示になります。
[TextArea]
public string textArea;
構造型
構造体にSystem.Serializable属性を付加するとインスペクター上に表示されるようになります。
[System.Serializable]
public struct Point
{
public int x;
public int y;
}
public Point point;
タプル型には対応していません。
public (int x, int y) point;
列挙型
列挙型はコンボボックス表示になります。
public enum Fruit
{
Apple,
Banana,
Orange,
}
public Fruit fruit;
列挙子を別名で表示するにはInspectorName属性を付加します。
public enum Fruit
{
[InspectorName("りんご")]
Apple,
[InspectorName("ばなな")]
Banana,
[InspectorName("みかん")]
Orange,
}
列挙型をツールバー表示するエディター拡張を作りました。
詳細はツールバー表示するエディター拡張をご覧下さい。
配列型
一次元の配列、リストに対応しています。
多次元配列やリストのリストのようにネストしているものには対応していません。
public int[] intArray = new int[] { 1, 2, 3 };
public List<int> intList = new List<int>() { 1, 2, 3 };
最近のUnityエディターでは配列はReorderableList表示されますが、
古いバージョンの配列表示にするにはNonReorderable属性を付加します。
[NonReorderable]
public int[] nonReorderableArray = new int[] { 1, 2, 3 };
Unityオブジェクトの表示
Unityオブジェクト
UnityEngine.Objectを継承しているUnityオブジェクトはEditorGUI.ObjectFieldで表示できます。
詳細はObjectFieldの表示についてをご覧下さい。
ベクトル
Unityのベクトル型です。
public Vector2 vector2;
public Vector3 vector3;
public Vector4 vector4;
Vector4だけ縦に表示されるのが少し嫌なので1行で表示できる拡張スクリプトを作りました。
詳細はVector4を1行で表示するエディター拡張をご覧下さい。
整数ベクトル
Unityの整数ベクトル型です。
public Vector2Int vector2Int;
public Vector3Int vector3Int;
Vector4Intクラスはありません。
行列
4x4行列のMatrix4x4です。
public Matrix4x4 matrix = Matrix4x4.identity;
この表示は変更したいですね・・・。
クォータニオン
クォータニオンです。
public Quaternion euler;
オイラー角からクォータニオンに変換された値が実際のクォータニオン変数に代入されますので
X, Y, Z に度(Degree)で指定します。
q = Quaternion.Euler(x, y, z);
境界
浮動小数点型のBoundsと整数型のBoundsIntがあります。
public Bounds bounds;
public BoundsInt boundsInt;
カラー
ColorUsageAttribute(bool showAlpha, bool hdr)を付加することでアレンジできます。
第1引数はアルファの有無、第2引数はHDRの有無です。
public Color color = Color.blue;
[ColorUsage(false, false)]
public Color nonAlphaNonHDR = Color.red;
[ColorUsage(true, false)]
public Color alphaNonHDR = Color.green;
[ColorUsage(false, true)]
public Color nonAlphaHDR = Color.yellow;
[ColorUsage(true, true)]
public Color alphaHDR = Color.cyan;
ColorUsage属性なしのカラーはColorUsage(true, false)と同じです。
RGBA要素がbyteのColor32というクラスもあります。
Colorと同じように表示されます。
public Color32 color32;
グラデーション
GradientUsage属性でHDRカラーを使うかどうかを指定できます。
public Gradient gradient;
[GradientUsage(true)]
public Gradient gradientHDR;
その他の表示
スライダー表示
スライダー表示にするにはRange属性を付加します。
[Range(0, 1)]
public float rate;
[Range(0, 100)]
public int percent;
スペース表示
Space属性を付加することでスペースをピクセル単位で追加できます。
以下の例では a と b の間を50ピクセル空けてます。
public int a;
[Space(50)]
public int b;
ヘッダー表示
Header属性を付加することでヘッダーを表示できます。
[Header("ヘッダー")]
public int headerInt;
ツールチップ表示
Tooltip属性を付加することでマウスカーソルがラベルに乗った時にツールチップを表示できます。
[Tooltip("ツールチップだよ")]
public int tooltipTest;
非表示
HideInInspector属性を付加することでパラメーターを非表示にできます。
[HideInInspector]
public int hideParameter;
このパラメーターはインスペクター上に表示されません。
自作エディター拡張
自作したエディター拡張を紹介します。
両端スライダーを表示するエディター拡張
[MinMaxRange(0f, 1f)]
public Vector2 minMaxRange = new Vector2(0.25f, 0.75f);
詳細は両端スライダーを表示するエディター拡張を参照して下さい。
ボタンを表示するエディター拡張
ボタンをインスペクター上に表示するエディター拡張です。
ボタンを押した時に呼び出したいコールバック関数を文字列で指定できます。
[Button("私を押して", "ButtonClicked")]
public int clickMe;
詳細はボタンを表示するエディター拡張を参照して下さい。
ツールバー表示するエディター拡張
文字列配列や列挙型をツールバー表示するエディター拡張です。
ボタンを押した時に呼び出したいコールバック関数を文字列で指定できます。
[Toolbar(new[] { "foo", "bar", "baz", "qux" }, "ItemSelected")]
public int index;
詳細はツールバー表示するエディター拡張を参照して下さい。
セレクショングリッドを表示するエディター拡張
文字列配列や列挙型をツールバー表示するエディター拡張です。
ツールバーとほぼ同じです。
ボタンを押した時に呼び出したいコールバック関数を文字列で指定できます。
[SelectionGrid(new[] { "foo", "bar", "baz", "qux" }, "ItemSelected")]
public int index;
詳細はセレクショングリッドを表示するエディター拡張を参照して下さい。
プログレスバーを表示するエディター拡張
プログレスバーを表示するエディター拡張です。
[ProgressBar]
public float progressBar = 0.5f;
詳細はプログレスバーを表示するエディター拡張を参照して下さい。
メッセージボックスを表示するエディター拡張
メッセージボックスを表示するエディター拡張です。
[Message(1, 40)]
public string info = "情報\n\\nで改行できます。";
詳細はメッセージボックスを表示するエディター拡張を参照して下さい。
ボックスを表示するエディター拡張
ボックスを表示するエディター拡張です。
[Box("Box")]
public int box;
詳細はボックスを表示するエディター拡張を参照して下さい。
エディターの拡張方法をまとめていますが、
まだまだ書けていない項目があるのでどんどん追記していきます。
関連ページ
こちらのページも合わせてご覧下さい。