simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Unity:ゲーム開始前にロジックでヒエラルキー編集

概要

アイテムのスロットを結構な数 たとえば 81 個とか追加して、連番で名前を打つといった作業
3~4個リネームしている途中で手を止めて、プログラムに任せたくなりますよね(守るべきは時間ではなく、心)
PlayMode にせずにスクリプトからヒエラルキーをロジックで編集する方法を記録してみたいと思います。

ExecuteInEditMode 属性をつける

このクラスは非ゲーム実行中も動くよと宣言

using UnityEngine;

[ExecuteInEditMode]
public class SlotAdder : MonoBehaviour
{
    public GameObject prefabSlot;
    public Transform parent;
    public int index;

    public void AddSlot()
    {
        var button = Instantiate(prefabSlot, parent);
        button.name = "slot" + index.ToString("00");
        index += 1;
    }
}

CustomEditor 属性をつける

さっきの AddSlot をボタン押したときに実行できると楽ですよね。
インスペクターにボタンを置いて、そこからクラスの関数を呼び出すことができます。

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(SlotAdder))]
public class SlotAdderButton : Editor 
{
    public override void OnInspectorGUI()
    {
        // 元のインスペクター部分を表示
        base.OnInspectorGUI();

        // targetを変換して対象を取得
        var slotAdder = target as SlotAdder;

        // publicなメソッドを実行するボタン
        if (GUILayout.Button("Add Slot"))
        {
            slotAdder.AddSlot();
        }
    }
}

ボタンの見た目

f:id:simplestar_tech:20191222222701p:plain
今から頑張るようなことじゃないかも