ボアブログ

へっぽこUnityエンジニアの色々

hierarchyでゲームオブジェクトのアクティブを切り替えるエディタ拡張を作ってみた

久しぶりの記事更新&Unity関連記事です。

UnityでPrefab周りを調整していたりすると親子関係を変えたりしつつ初期のアクティブを切り替えたりすることがあります。
これには通常Inspectorウィンドウでアクティブのチェックボックスをクリックすることで切り替える動作が必要になりますがhierarchyでも出来るようにしておくと結構便利です。

f:id:weakboar:20170917043155g:plain と、言うわけで用意してみました。githubに上げるのも面倒なので全文です。

using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEditor;

public static class ActiveBoxInHierarchy
{
    private const int WIDTH = 16;
    private static readonly MethodInfo mGetIconForObject = typeof(EditorGUIUtility)
        .GetMethod("GetIconForObject", BindingFlags.NonPublic | BindingFlags.Static);

    [InitializeOnLoadMethod]
    private static void Init()
    {
        EditorApplication.hierarchyWindowItemOnGUI += OnGUI;
    }

    private static void OnGUI(int instanceId, Rect selectionRect)
    {
        var pos = selectionRect;
        pos.x = pos.xMax - WIDTH;
        pos.width = WIDTH;

        var selectedItem = EditorUtility.InstanceIDToObject(instanceId) as GameObject;
        if (selectedItem == null)
        {
            return;
        }
        var toggle = GUI.Toggle(pos, selectedItem.activeSelf, string.Empty);

        selectedItem.SetActive(toggle);
    }
}

仕組みは簡単です。
InitializeOnLoadMethodがついたメソッド、Initはコンパイル後実行されます。今回はhierarchyWindowItemOnGUIでhierarchyのアイテムごとに呼び出されるデリゲートに対してチェックボックス(Toggle)を表示する機能を追加しています。

今回の拡張は50行未満のとても簡単なコードですが個人的にかなり生産性が上がります。こんな感じで簡単に自分好みのエディタに出来るものは沢山あると思うので皆ドンドン開発しましょう。

参考

【Unity】Hierarchyにゲームオブジェクトを選択できるチェックボックスを表示するエディタ拡張 - コガネブログ