トップ > 【Unity】エディター拡張方法をまとめます!
更新日 2022/9/21

【Unity】エディター拡張方法をまとめます!

Unityエディターの拡張方法をまとめます。

基本的な使い方

MonoBehaviourを継承したクラスで宣言された変数をUnityエディターで編集できるようにするには以下の2パターンのどちらかを満たす必要があります。

  1. パブリック(public)なフィールド
  2. UnityEngine.SerializeField属性を付加したフィールド
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour
{
public int publicInt; // 1

[SerializeField]
private int privateInt; // 2
}

インスペクター上でパラメーターを編集できるようになります。

EditorExtensions_MonoBehaviour

組み込み型

組み込み型の対応状況とインスペクター上の見え方についてまとめます。

符号付き整数型

符号付き整数型の sbyte short int long は全て対応されています。

EditorExtensions_Integers

符号なし整数型

符号なし整数型の byte ushort uint ulong は全て対応されていますが、
ulongのエディター表示がバグなのか仕様なのか分かりませんが、符号付きのlongと同じ表示になります。

EditorExtensions_UnsignedIntegers

浮動小数点型

浮動小数点型は float double は対応されていますが、decimalは未対応です。

EditorExtensions_Floats

Min属性を付加することで最小値を設定できます。
以下の例ではマイナス値を受け付けないプラス値の浮動小数を表現できます。

public float positiveFloat;
EditorExtensions_MinFloat

論理型

論理型の bool はチェックボックス表示になります。

EditorExtensions_Bool

文字型

文字型の char は1文字のみ受け付けます。

EditorExtensions_Char

文字列型

文字列型の string は標準で1行のみ受け付けます。

EditorExtensions_String

TextArea属性を付けると複数行表示になります。

[TextArea]
public string textArea;
EditorExtensions_TextArea

構造型

構造体にSystem.Serializable属性を付加するとインスペクター上に表示されるようになります。

[System.Serializable]
public struct Point
{
public int x;
public int y;
}

public Point point;
EditorExtensions_Struct

タプル型には対応していません。

public (int x, int y) point;

列挙型

列挙型はコンボボックス表示になります。

public enum Fruit
{
Apple,
Banana,
Orange,
}

public Fruit fruit;
EditorExtensions_Enum

列挙子を別名で表示するにはInspectorName属性を付加します。

public enum Fruit
{
[InspectorName("りんご")]
Apple,
[InspectorName("ばなな")]
Banana,
[InspectorName("みかん")]
Orange,
}
EditorExtensions_InspectorName

列挙型をツールバー表示するエディター拡張を作りました。

ToolbarDrawer_Enum

詳細はツールバー表示するエディター拡張をご覧下さい。

toolbardrawer
【Unity】ツールバー表示するエディター拡張方法を紹介します!2022/7/14

配列型

一次元の配列、リストに対応しています。
多次元配列やリストのリストのようにネストしているものには対応していません。

public int[] intArray = new int[] { 1, 2, 3 };

public List<int> intList = new List<int>() { 1, 2, 3 };
EditorExtensions_Array

最近のUnityエディターでは配列はReorderableList表示されますが、
古いバージョンの配列表示にするにはNonReorderable属性を付加します。

[NonReorderable]
public int[] nonReorderableArray = new int[] { 1, 2, 3 };
EditorExtensions_NonReorderableList

Unityオブジェクトの表示

Unityオブジェクト

UnityEngine.Objectを継承しているUnityオブジェクトはEditorGUI.ObjectFieldで表示できます。

IconAndText

詳細はObjectFieldの表示についてをご覧下さい。

objectfieldvisualtype
【Unity】EditorGUIのObjectFieldの表示についてまとめます!2022/9/20

ベクトル

Unityのベクトル型です。

public Vector2 vector2;
public Vector3 vector3;
public Vector4 vector4;
EditorExtensions_Vector

Vector4だけ縦に表示されるのが少し嫌なので1行で表示できる拡張スクリプトを作りました。

EditorExtensions_Vector4Drawer

詳細はVector4を1行で表示するエディター拡張をご覧下さい。

vector4drawer
【Unity】Vector4を1行で表示するエディター拡張を紹介します!2022/7/6

整数ベクトル

Unityの整数ベクトル型です。

public Vector2Int vector2Int;
public Vector3Int vector3Int;
EditorExtensions_VectorInt

Vector4Intクラスはありません。

行列

4x4行列のMatrix4x4です。

public Matrix4x4 matrix = Matrix4x4.identity;
EditorExtensions_Matrix

この表示は変更したいですね・・・。

クォータニオン

クォータニオンです。

public Quaternion euler;
EditorExtensions_Quaternion

オイラー角からクォータニオンに変換された値が実際のクォータニオン変数に代入されますので
X, Y, Z に度(Degree)で指定します。

q = Quaternion.Euler(x, y, z);

境界

浮動小数点型のBoundsと整数型のBoundsIntがあります。

public Bounds bounds;
public BoundsInt boundsInt;
EditorExtensions_Bounds

カラー

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;
EditorExtensions_Color

ColorUsage属性なしのカラーはColorUsage(true, false)と同じです。

RGBA要素がbyteのColor32というクラスもあります。
Colorと同じように表示されます。

public Color32 color32;

グラデーション

GradientUsage属性でHDRカラーを使うかどうかを指定できます。

public Gradient gradient;

[GradientUsage(true)]
public Gradient gradientHDR;
EditorExtensions_Gradient

その他の表示

スライダー表示

スライダー表示にするにはRange属性を付加します。

[Range(0, 1)]
public float rate;

[Range(0, 100)]
public int percent;
EditorExtensions_Range

スペース表示

Space属性を付加することでスペースをピクセル単位で追加できます。
以下の例では a と b の間を50ピクセル空けてます。

public int a;

[Space(50)]
public int b;
EditorExtensions_Space

ヘッダー表示

Header属性を付加することでヘッダーを表示できます。

[Header("ヘッダー")]
public int headerInt;
EditorExtensions_Header

ツールチップ表示

Tooltip属性を付加することでマウスカーソルがラベルに乗った時にツールチップを表示できます。

[Tooltip("ツールチップだよ")]
public int tooltipTest;
EditorExtensions_Tooltip

非表示

HideInInspector属性を付加することでパラメーターを非表示にできます。

[HideInInspector]
public int hideParameter;

このパラメーターはインスペクター上に表示されません。


自作エディター拡張

自作したエディター拡張を紹介します。


両端スライダーを表示するエディター拡張

[MinMaxRange(0f, 1f)]
public Vector2 minMaxRange = new Vector2(0.25f, 0.75f);
MinMaxRange

詳細は両端スライダーを表示するエディター拡張を参照して下さい。

minmaxrangedrawer
【Unity】両端編集可能なスライダーを表示するエディター拡張を紹介します!2022/7/11

ボタンを表示するエディター拡張

ボタンをインスペクター上に表示するエディター拡張です。
ボタンを押した時に呼び出したいコールバック関数を文字列で指定できます。

[Button("私を押して", "ButtonClicked")]
public int clickMe;
ButtonDrawer

詳細はボタンを表示するエディター拡張を参照して下さい。

buttondrawer
【Unity】CustomEditorを使わないでボタンを表示するエディター拡張方法を紹介します!2022/7/12

ツールバー表示するエディター拡張

文字列配列や列挙型をツールバー表示するエディター拡張です。
ボタンを押した時に呼び出したいコールバック関数を文字列で指定できます。

[Toolbar(new[] { "foo", "bar", "baz", "qux" }, "ItemSelected")]
public int index;
ToolbarDrawer

詳細はツールバー表示するエディター拡張を参照して下さい。

toolbardrawer
【Unity】ツールバー表示するエディター拡張方法を紹介します!2022/7/14

セレクショングリッドを表示するエディター拡張

文字列配列や列挙型をツールバー表示するエディター拡張です。
ツールバーとほぼ同じです。
ボタンを押した時に呼び出したいコールバック関数を文字列で指定できます。

[SelectionGrid(new[] { "foo", "bar", "baz", "qux" }, "ItemSelected")]
public int index;
SelectionGridDrawer

詳細はセレクショングリッドを表示するエディター拡張を参照して下さい。

selectiongriddrawer
【Unity】セレクショングリッドを表示するエディター拡張方法を紹介します!2022/7/22

プログレスバーを表示するエディター拡張

プログレスバーを表示するエディター拡張です。

[ProgressBar]
public float progressBar = 0.5f;
ProgressBar

詳細はプログレスバーを表示するエディター拡張を参照して下さい。

progressbar
【Unity】プログレスバーを表示するエディター拡張方法を紹介します!2022/7/15

メッセージボックスを表示するエディター拡張

メッセージボックスを表示するエディター拡張です。

[Message(1, 40)]
public string info = "情報\n\\nで改行できます。";
MessageDrawer

詳細はメッセージボックスを表示するエディター拡張を参照して下さい。

messagedrawer
【Unity】メッセージボックスを表示するエディター拡張方法を紹介します!2022/7/16

ボックスを表示するエディター拡張

ボックスを表示するエディター拡張です。

[Box("Box")]
public int box;
BoxDrawer

詳細はボックスを表示するエディター拡張を参照して下さい。

boxdrawer
【Unity】ボックスを表示するエディター拡張方法を紹介します!2022/7/18

エディターの拡張方法をまとめていますが、
まだまだ書けていない項目があるのでどんどん追記していきます。


関連ページ


Copyright ©2022 - 2024 うにぉらぼ