Unity拡張エディタを作ろう!

こんにちは、マツノです。

Unityやってますか?

Unityで作業をしていると同じ手順の作業を沢山のObject相手に何度も繰り返し行ったりすることが結構あって、やっている途中にミスが発生したり、何より面倒ですよね。

そんな時にスクリプトで作業を自動で行うようにできる機能がUnityには存在します、拡張エディタと言います。

UnityAssetStoreを探せばいくつも便利な拡張エディタが見つかりますが市販されている物は基本的に汎用性が高い物が多く、自分が今やりたいな~って思うような局所的な作業に対応しているツールはありません。

そんな時、自分で拡張エディタを作成することができれば作業効率は上昇すること間違いなしです。 普段からUnityで何か作っているなら簡単に作成することができるでしょう。

初回なので、簡単で基本的な拡張エディタを紹介します。

using UnityEngine;
using UnityEditor;

public class Set_Prefab : EditorWindow {

  private Vector3 pos;
  private GameObject prefab;

  [MenuItem("GameObject/SetPrefab")]
  static void init()
    {
        EditorWindow.GetWindow<Set_Prefab>(”Set_Prefab”);
    }

    private void OnGUI()
    {
        prefab = EditorGUILayout.ObjectField("prefab", prefab, typeof(GameObject), true) as GameObject;
        pos = EditorGUILayout.Vector3Field("postion", pos);

        if (GUILayout.Button("set")) 
        {
            GameObject obj = Instantiate(prefab);
            obj.transform.position = pos;
        }
    }
}

Editor/Set_Prefab.cs

指定したオブジェクトを指定した座標に配置する拡張エディタです。 拡張エディタを作るにはUnityが標準で生成するC#ファイルに追加でUnityEditor宣言し、継承クラスをMonoBehiberからEditorWindowに変えます。

[MeneItem()]属性をつけたメソッドは引数に指定したメニューより呼び出すことができます、この場合はGameObjectメニューの中にSetPrefabという項目が追加され、それを選択することでinitメソッドが呼び出されます。

EditorWindow.GetWindowは指定クラスのEditorWindowを表示します、引数に指定した文字列で表示時のタブの文字列を変更することが可能です。

onGUIメソッドでウィンドウに表示する内容を設定することが可能です。
Windowが表示されている時にMonoBehaviour.Update()と同じ感じで呼び出されます。
EditorGUILayoutやGUILayoutに様々なパーツがあるのでそれを組み合わせるなりして作成します、基本的に上から順に一列ずつ作成されていきます。

ここで使ってないパーツはUnityScriptReferenceを参照してください。 だいたいインスペクターで見たことあるパーツがあります。

GUILayout.Button("set")はボタンを生成し、押されているかをBoolで返してくるのでifで受け取って処理本文を記述します。

そして最後に大事なことですが、拡張エディターのC#ファイルは必ずEditorというフォルダを作成し、その中に入れてください。 Editorフォルダ下はビルド時や再生時にコンパイルの対象外になり、もし外にあるとエラーの原因になります。

基本的な拡張エディタの書き方は以上です。

Matsuno

AR VR Engineer

Unity拡張エディタを作ろう!

お気軽に
お問い合わせください。

お問い合わせ