目次
はじめに
通常 Unity エディター上から Hierarchy にあるオブジェクトのアクティブを切り替える時は Inspector で変更します。
この記事では、Unity の Hierarchy ビューからオブジェクトのアクティブ切り替えが可能になるエディター拡張を紹介します。
Unity 環境
Unity 2020.2.0f1
拡張後の見た目
Hierarchy の右側に、オブジェクトのアクティブを切り替えるトグルが表示されるようになります。

実際の挙動は以下になります。

コード紹介
using UnityEngine;
using UnityEditor;
public static class HierarchyGUI
{
private const int WIDTH = 16;
private const int OFFSET = 10;
[InitializeOnLoadMethod]
private static void Initialize()
{
EditorApplication.hierarchyWindowItemOnGUI += OnGUI;
}
private static void OnGUI(int instanceID, Rect selectionRect)
{
var go = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
if (go == null)
{
return;
}
var pos = selectionRect;
pos.x = pos.xMax - OFFSET;
pos.width = WIDTH;
bool active = GUI.Toggle(pos, go.activeSelf, string.Empty);
if (active == go.activeSelf)
{
return;
}
Undo.RecordObject(go, $"{(active ? "Activate" : "Deactivate")} GameObject '{go.name}'");
go.SetActive(active);
EditorUtility.SetDirty(go);
}
}
コード解説
InitializeOnLoadMethod
静的 (static) メソッドに InitializeOnLoadMethod
属性を付加することで、Unity エディター起動時やスクリプトのコンパイル直後にメソッドが呼び出されます。
クラスの静的コンストラクタを呼び出すための属性として、InitializeOnLoad
も存在します。
EditorApplication.hierarchyWindowItemOnGUI
Hierarchy ビューで各ゲームオブジェクトやアセットの文字が描画されている範囲をコールバックとして取得できます。
Hierarchy からの変更を保存
33 ~ 35行目では以下の3行が書かれています。
Undo.RecordObject(go, $"{(active ? "Activate" : "Deactivate")} GameObject '{go.name}'");
go.SetActive(active);
EditorUtility.SetDirty(go);
Hierarchy からのアクティブ変更時にRecordObject
とEditorUtility.SetDirty
を行うことで、エディターに変更を認知させます。
これによりシーン切り替え時や実行時にも変更後の状態が保存されるようになります。
関連記事

Unityの教科書 Unity 2021完全対応版 2D&3Dスマートフォンゲーム入門講座
いちばん売れているUnity入門書が最新バージョンに対応 最新環境でゲーム制作を楽しく体験しましょう! ■本書の特徴 ●初めてゲーム制作にチャレンジする人に最適! 最初は簡単な2Dゲームの制作からスタートし、徐々に難しいゲームへと進めていきます。サンプルゲームの制作を通じて、Unityの機能と、ゲームを作るための知識が自然と身に付きます。 ●プログラムの書き方がわからなくても大丈夫! C#の基礎知識も掲載しているので、プログラミング経験のまったくない人でも、安心して学習を開始することができます。 ●ゲームを面白くするためのヒントを掲載! Unityの使い方だけでなく、ゲームの設計方法、レベルデザインなど、ゲームを面白く作るための知識も紹介しています。
作って学べる Unity 本格入門 [Unity 2021対応版] 作って学べる開発入門
本書はUnityでゲーム開発を行いたい人を対象に、1つのゲームを制作する流れを通してUnity 2021の操作が学べる入門解説本です。本書内で武器などを調達し、食べ物を求めながら冒険し、武器でモンスターと戦う3Dアクションゲームを制作していきます。本格的なゲームを実際に制作しながらUnityの使い方を学べますので、楽しみながら学びことができ、かつ実践的なテクニックも身につけることができます。
新・標準プログラマーズライブラリ なるほどなっとく C#入門
本書は、プログラミングの知識・経験がなくてもC#の基本文法を身につけることができる入門書です。 そのために、「初心者に理解して身につけてほしい機能を厳選し、ポイントを絞る」 「C#になぜその機能があるのか、どんな場面で使うのかという点も納得できる」という方針で解説しています。 C#の文法は膨大ですが、これから学ぼうとする方は、すべてを覚える必要はありません。 本書を通して、「なぜ」という疑問をひとつひとつ解消しながら、 利用頻度の高い文法をしっかりと自分のものにすることができます。