【Unity×C#】【エディタカスタム】自動でシーンにオブジェクトを配置する


通常シーンにオブジェクトを配置する場合、
手動でドラッグ&ドロップして配置するのが主流です。
大量のオブジェクトを配置する場合この方法だととても手間がかかる作業になります。

エディタ拡張によってこの問題を解消することができます。


今回はEditorWindowを継承したクラスを使い、カスタムしたウインドウを作成します
このウインドウを使用してオブジェクトをシーンに配置します。

using UnityEngine;
using UnityEditor;

public class SampleEditor : EditorWindow
{
    GameObject obj;

    // メニューの名前
    // Unityエディタのメニューに追加される
    // 初期化関数
    [MenuItem("Custom/SampleEditor")]
    static void Init()
    {
        SampleEditor window = (SampleEditor)EditorWindow.GetWindow(typeof(SampleEditor));
        window.Show();
    }

    // エディターのGUIを実装
    // 
    void OnGUI()
    {
        // 配置したいオブジェクトを選択するためのフィールドを配置
        obj = EditorGUILayout.ObjectField(obj, typeof(GameObject), true) as GameObject;

        // エディターにGenerateという名前のボタンを配置
        // 押されたらオブジェクトがシーンに配置される
        if (GUILayout.Button("Generate"))
        {
            generate();
        }
    }

    // シーンにオブジェクトを配置する
    // 16個を4×4で配置する
    void generate()
    {
        for (int i = 0; i < 16; i++)
        {
            float col = (i % 4) ;
            float row = (i / 4);
            Instantiate(obj, new Vector3(col, 0, row), Quaternion.identity);
        }
    }
}

使い方は以下の通りです。

Unityが提供しているキャラクターを生成して規則的に配置しました。
このように手作業でやると時間がかかることも、
エディタを拡張すれば自動化することができます

今回作ったものはかなり簡単なものですが、
工夫次第でゲームの開発効率を格段に上げることができます。