お世話になっております。
しゃまとんです。

少し前にエディタ拡張に入門しまして、あれこれと触っているのですが
「これどうやって実装するんだっけ〜〜〜」となることが多々あり、 とりあえず確認できるコードがほしいとなったので、一覧で確認するサンプルを作りました。

本当はこの辺とかでちゃんと学んだほうがいいとは思うのですが、 とりあえずエディタ拡張させろや!!っていう方も是非ご利用ください。

使いそうなもろもろを入れ込んでます。
一応、動作確認してみたものを載せておきます。(見切れてしまっているものがありますがご容赦ください(;・∀・))

以下はコードです。

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
namespace EditorExtension {
public class EditorExtensionSample : EditorWindow {
public int vIntField;
public int vIntPopup;
public int vIntSlider;
public float vFloatField;
public float vfloatSlider;
public Vector2 vMinMax = new Vector2(5f, 7.5f);
public string vTextField = string.Empty;
public string vPassword = string.Empty;
public bool isToggle;
public Vector3 vVector3;
public Rect vRect;
public enum SampleEnum {
A,
B,
C
}
public SampleEnum vEnumField;
public SampleEnum vEnumPopup;
public int vLayerField;
public int vMaskField;
public Color vColor = Color.red;
public GameObject vGameObject;
public AnimationCurve vAnimationCurve = AnimationCurve.EaseInOut(0, 0, 1, 1);
public bool isFoldout;
/////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// メニュー実行時.
/// </summary>
/////////////////////////////////////////////////////////////////////////////////////////////////
[MenuItem("Shamaton/ExtensionSample")]
static void OnOpenFromMenu() {
// ウインドウを作成
EditorExtensionSample window = EditorWindow.GetWindow<EditorExtensionSample>();
window.Initialize();
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// 初期化
/// </summary>
/////////////////////////////////////////////////////////////////////////////////////////////////
void Initialize() {
titleContent = new GUIContent("ExSample");
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// ウインドウ制御
/// </summary>
/////////////////////////////////////////////////////////////////////////////////////////////////
void OnGUI() {
GUILayout.BeginVertical();
EditorGUILayout.Separator();
vIntField = EditorGUILayout.IntField("IntField", vIntField);
vIntSlider = EditorGUILayout.IntSlider("IntSlider", vIntSlider, 1, 500);
vIntPopup = EditorGUILayout.IntPopup("IntPopup", vIntPopup, new string[]{"t", "e", "s", "t"}, new int[]{1, 3, 5, 7} );
vFloatField = EditorGUILayout.FloatField("FloatField", vFloatField);
vfloatSlider = EditorGUILayout.Slider("FloatSlider", vfloatSlider, 1f, 5f);
EditorGUILayout.MinMaxSlider( new GUIContent("MinMaxSlider"), ref vMinMax.x, ref vMinMax.y, 0.0f, 10.0f);
vTextField = EditorGUILayout.TextField("TextField", vTextField);
vPassword = EditorGUILayout.PasswordField("PasswordField", vPassword);
isToggle = EditorGUILayout.Toggle("Toggle", isToggle);
vVector3 = EditorGUILayout.Vector3Field("Vector3Field", vVector3);
vRect = EditorGUILayout.RectField("RectField", vRect);
vEnumField = (SampleEnum)EditorGUILayout.EnumMaskField("EnumMaskField", vEnumField);
vEnumPopup = (SampleEnum)EditorGUILayout.EnumPopup("EnumPopup", vEnumPopup);
vLayerField = EditorGUILayout.LayerField("LayerField", vLayerField);
vMaskField = EditorGUILayout.MaskField("MaskField", vMaskField, new string[]{"s", "h", "a"} );
// 色
vColor = EditorGUILayout.ColorField("Color", vColor);
vGameObject = (GameObject)EditorGUILayout.ObjectField("ObjectField", vGameObject, typeof(GameObject), false);
// アニメーションカーブ
vAnimationCurve = EditorGUILayout.CurveField("CurveField", vAnimationCurve);
bool isPush = GUILayout.Button("button", GUILayout.Width(100f));
if (isPush) {
Debug.Log("is push !!");
}
isFoldout = EditorGUILayout.Foldout(isFoldout, "FoldOut");
if (isFoldout) {
EditorGUILayout.LabelField("Label", "Field");
EditorGUILayout.Space();
EditorGUILayout.HelpBox("help box", MessageType.Info);
EditorGUILayout.HelpBox("help box", MessageType.Warning);
EditorGUILayout.HelpBox("help box", MessageType.Error);
}
GUILayout.EndVertical();
}
}
}

エディタ拡張できるようになると開発効率をあげられそうなので、是非覚えたいところですね!以上です。