この記事は「Unity アセット真夏のアドベントカレンダー 2020 Summer!」2 日目の記事になります。
昨日のアドカレは、汗人柱さんの「Massive Clouds Atmosなど雲、天候、昼夜が美しい空アセット8連発!グラフィック & 機能比較まとめ」でした。
明日のアドカレは、k1t(外神) さんの「すぐに遊べるダンジョンを自動生成 (Dungeon Architect & Multistory Dungeons)」です。
はじめに
Asset Store には、Unity Editor の機能を拡張して開発の手助けをしてくれるユーティリティが数多く公開されています。
今回はその中でも、Hierarchy Window をパワーアップしてくれる 2 つのアセット、QHierarchy と Hierarchy Folders をご紹介します。
QHierarchy
Hierarchy Window に表示される情報を増やしてくれる QHierarchy は、長年多くの Unity ユーザーに親しまれている定番とも言えるアセットです。難しい設定は不要で、様々な情報をワンクリックで表示できるようになります。
インストールすると、まず Hierarchy にツリー(├
のような罫線)とストライプが表示されるようになります。
さらに、設定画面から表示させる情報を選択することができます。中でも Components と Visiblity は特に便利なので、ぜひ有効にしておきましょう。
設定画面は、メニューの Tools > QHierarchy > Settings で開くことができます。
Components
Components を有効にすると、各 GameObject にアタッチされているコンポーネントのアイコンが表示されるようになります。通常は名前でしか区別することができなかった GameObject を、持っている機能によって視覚的に判別できるようになり、編集が非常に捗ります。
さらに、アイコンをクリックすることでコンポーネントの有効・無効を切り替えることができます。無効になっているコンポーネントはアイコンが暗くなりますので、今どのコンポーネントが機能しているのかが簡単に判ります。
Visiblity
Visiblity を有効にすると、目のアイコンが表示されるようになります。これをクリックすることで、GameObject の有効・無効を切り替えることができます。
Hierarchy の左端にも元々同じような目のアイコンがありますが、こちらが Scene ビュー上で非表示になるだけなのに対し、Visiblity アイコンは GameObejct 自体が無効になります(SetActive(false)
をしたのと同じ)。
補足
他にも、GameObject に設定したアイコンやタグ名・レイヤー名など、表示できる項目はまだまだ豊富にありますので、自分の好みに合わせてカスタマイズしてみてください。
なお、初期状態では「MonoBehaviour Icon」という項目が有効になっています。これは、MonoBehaviour を持つ GameObject の名前の左に半透明の青い四角を表示させる機能なのですが、やや見づらいのに加え、Components を有効にしていれば必要性の薄い機能なので、オフにしておくのをおすすめします。
Hierarchy Folders
Hierarchy を整理する手法として、空の GameObject を区切り線やフォルダとして使うというハックがありますが、これは実行時のパフォーマンスに少なからず悪影響が出る*1ので、できればやりたくありません。とは言えシーンが大きくなってくると、区切り線やフォルダ無しでは厳しい場面も多くなってくるでしょう。そんな時に役立つのが Hierarchy Folders です。
Hierarchy Folders は、その名のとおり Hierarchy にフォルダを追加することができるアセットです。このフォルダは、ビルド時に自動で削除されるため、気兼ねなく使うことができます。
カスタマイズ
フォルダのアイコンは、好きな画像に変更することもできます。
フォントのカラーを変更するような機能はありませんが、そこは自分で拡張すれば問題ありません。以下は、フォルダのフォントをグレーにするエディター拡張です。
// HierarchyFolderColoring.cs using Sisus.HierarchyFolders; using UnityEditor; using UnityEngine; public class HierarchyFolderColoring : Editor { static readonly Vector2 offset = new Vector2(18f, 0); static readonly Color separatorColor = Color.HSVToRGB(0f, 0f, 0.5f); [InitializeOnLoadMethod] static void AddHierarchyItemOnGUI() { EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI; } static void HierarchyWindowItemOnGUI(int instanceId, Rect selectionRect) { var gameObject = EditorUtility.InstanceIDToObject(instanceId) as GameObject; if (gameObject == null) { return; } var hierarchyFolder = gameObject.GetComponent<HierarchyFolder>(); if (hierarchyFolder == null) { return; } var offsetRect = new Rect(selectionRect.position + offset, selectionRect.size); EditorGUI.LabelField(offsetRect, gameObject.name, new GUIStyle { normal = new GUIStyleState { textColor = separatorColor } }); } }
区切り線として使う
フォルダに格納すれば見た目はスッキリしますが、個人的にはフォルダをいちいち開くのが若干面倒なので、自分は区切り線として使っています。アイコンを「_」のような画像に差し替えれば、良い感じの区切り線になってくれます。
もちろん、区切り線とフォルダを併用することも可能です。その場合、アイコンはデフォルトのものにしておくのが良いでしょう。
補足
なお、フォルダは Unity Editor でシーンを再生したときにも削除されますが、この機能はオフにすることもできます。個人的には、再生中であっても区切り線があったほうが見やすいので、オフにしています。
さいごに
ここで紹介した 2 つのアセット以外にも、Asset Store には Hierarchy Window を拡張するユーティリティが数多くあります。ぜひ好みの拡張を探して使ってみてください!
*1:"空" だと思っているのは我々だけで、実際は Transform を持った有効な実体としてゲーム中に展開されてしまいます。