この記事はUnity #3 Advent Calendar 2018の12日目の記事です。
この記事でのバージョン
Unity 2018.2.17f1
はじめに
Unityはその拡張性の高さとしやすさから、
Asset Storeを中心に様々なエディタ拡張用のアセットが公開されています。
今回はその中でも、おそらく誰でも&どんなプロジェクトでも使うであろう
Console, Inspector, Hierarchy, Project, Scene, Gameという
基本機能(ウィンドウ)を拡張するアセットと、その機能をざっくり紹介していきたいと思います。
今回紹介するアセットを全部追加する前と後を比較すると一目瞭然!
見た目の違いはもちろん、利便性も段違いで、デフォルトのUnityに戻れなくなること請け合いです!!
目次
- はじめに
- 目次
- Editor Console Pro (Consoleのログ周りを拡張)
- Odin (Inspectorの見栄え改善&属性追加)
- QHierarchy (Hierarchyによく使用する機能を追加)
- Favorites Tab[s] (ProjectやHierarchyにお気に入り機能を追加)
- Editor Camera (Sceneカメラの情報を保存&復元)
- GameViewSizeChanger (Gameの画面サイズを瞬時に変更、縦横切り替えとSafeAreaに対応)
- おわりに
Editor Console Pro (Consoleのログ周りを拡張)
Editor Console ProはConsoleを拡張するアセットで、
ログ周りをより使いやすくしてデバッグを簡単にし、生産性を上げられるものです。
(正確にはConsoleを拡張するのではなく似たような感じだが、違うウィンドウ)
Editor Console Pro - Asset Store |
ログの種類の応じて色分け
ログの種類の応じて色分けする事が可能です。
ログの種類がより強調されるので、見分けが付きやすくなります。
ログの検索
ウィンドウ上部の検索窓からログを検索する事が可能です。
必要なログだけを表示できて、かなり便利。
該当コードの表示とジャンプ
普通のConsoleだとログが発生した行数が順に列挙されるだけですが、
Editor Console Proならログが発生している実際のコードの表示が可能です。
どのクラスのどの箇所かが表示されるので、分かりやすいです。
もちろん、該当コードへのジャンプも可能。
オリジナルフィルタ
ログ、警告、エラー等の基本フィルタ以外にオリジナルフィルタを作る事が可能です。
必要な情報を瞬時に選別出来るようになるので、捗ります。
ログの改行表示
普通のConsoleだとログが長すぎる場合は表示仕切れなくなりますが、
Editor Console Proならログを改行して表示する事が可能です。
いちいちウィンドウのサイズを伸ばさなくていいので楽になります。
ログの監視
ConsoleProDebug.Watchを使う事で変数等の監視を行う事が可能です。
逐一、値の確認が出来るようになるので、効率的です。
情報の追加
表示する情報(クラス名やメソッド名等)を追加する事が可能です。
詳細を見なくてもある程度把握しやすくなるので、時間の節約になります。
Odin (Inspectorの見栄え改善&属性追加)
OdinはInspectorを拡張するアセットで、
導入するだけInspectorの見栄えを良くし、更に80以上の属性を追加する事で
Inspectorを圧倒的に使いやすくします。
Odin - Inspector and Serializer - Asset Store |
Listを見やすく、使いやすく
Odinを導入すると何もせずともListの表示がいい感じに変わります。
[SerializeField] private List<string> _list = new List<string>(){"test", "TEST", "Test"};
なお、Vector3やQuaternionなども導入するだけでInspector上の見た目が変わります。
DictionaryをInspectorに表示
MonoBehaviourではなく、SerializedMonoBehaviourを継承させると
DictionaryをInspectorに表示させる(シリアライズする)事が出来るようになります。
using System.Collections.Generic; using UnityEngine; using Sirenix.OdinInspector;//SerializedMonoBehaviourを使うのに必要 //MonoBehaviourではなく、SerializedMonoBehaviourを継承 public class NewBehaviourScript : SerializedMonoBehaviour { //Dictionaryもシリアライズ出来るように [SerializeField] private Dictionary<string, int> _dict = new Dictionary<string, int>(){ {"Key1", 1}, {"Key2", 2}, {"Key3", 3} }; }
Inspector上で編集出来ないように
ReadOnlyを使うとInspector上で編集出来ないように出来ます。
[ReadOnly] public int ReadOnlyNum = 100;
プロパティをInspectorに表示
ShowInInspectorを使うとprivate変数やプロパティをInspectorに表示できるようになります。
ただし、変更しても値は保存できないので確認専用です。
[ShowInInspector]
public Vector3 ShowInInspectorVector3{get;set;}
ラベルを非表示
HideLabelを使うと変数の横に表示されるラベルを非表示できます。
[HideLabel] public string HideLabelTest = "HideLabel";
ラベルを自由に設定
LabelTextを使うと変数の横に表示されるラベルを自由に設定できます。
[LabelText("自由な名前に")] public string LabelTextTest = "LabelTextTest";
インデントの設定
Indentを使うとインデントを自由に設定できます。
[Indent(1)] public bool Indent1 = false; [Indent(2)] public bool Indent2 = false; [Indent(3)] public bool Indent3 = false; public bool NoIndet;
メソッドを実行するボタンをInspectorに生成
Buttonを使うとメソッドを実行できるボタンを生成できます。
[Button("押して!")] private void OnClick() { Debug.Log("押した!"); }
グループ化
BoxGroup, FoldoutGroup, TabGroupのいずれかを使うと
変数をグループ化して表示する事ができます。
[BoxGroup("グループ1")] public int A, B, C; [BoxGroup("グループ2")] public int D, E, F;
[FoldoutGroup("グループ1")] public int A, B, C; [FoldoutGroup("グループ2")] public int D, E, F;
[TabGroup("グループ1")] public int A, B, C; [TabGroup("グループ2")] public int D, E, F;
QHierarchy (Hierarchyによく使用する機能を追加)
QHierarchyはHierarchyを拡張するアセットで、
Hierarchyによく使用する機能を追加する事で作業の効率化が行えます。
QHierarchy - Asset Store |
なお、色々と機能はありますが、全部表示するとごちゃごちゃし過ぎるので、
必要に応じて切り替えて使う感じになると思います。
ツリーの表示
Hierarchyの左端にツリーを表示する事が出来ます。
MonoBehaviourがアタッチされているか
MonoBehaviourのスクリプトがアタッチされているオブジェクトに色を付ける事が出来ます。
オブジェクトの有効無効切り替え
オブジェクトの有効無効をHierarchy上で切り替えられるように出来ます。
(Inspectorの左上のチェックボックスと同じ感じ)
なお、Shfitを押しながらクリックすると子のオブジェクトを一緒に切り替え、
Altを押しながらだと兄弟のオブジェクトを一緒に切り替える事ができます。
さらにCmd(Ctrl)を押しながらクリックすると
エディタを実行していない時だけ消し、実行時には表示されるようにも出来ます。
この状態だとアイコンには斜め線が入り、色も変わります(デフォルトでは青)。
オブジェクトを編集不可にする
オブジェクトを編集不可に出来ます。
なお、Shfitを押しながらクリックすると子のオブジェクトを一緒に切り替え、
Altを押しながらだと兄弟のオブジェクトを一緒に切り替える事ができます。
missingやnullなどの検知
何かしらの問題があるオブジェクトにアイコンを表示する事が出来ます。
なお、QHierarchyNullableを使えばnullになっていてもアイコンを表示しないようにも出来ます。
[QHierarchyNullable]
public GameObject Prefab;
タグとレイヤーの名前を表示、変更
Hierarchy上にオブジェクトのタグとレイヤーの名前を表示し、クリックで変更出来るように出来ます。
オブジェクトのアイコン表示、変更
Hierarchy上にオブジェクトのアイコンを表示し、クリックで変更出来るように出来ます。
(Inspectorの左上で設定出来るのと同じ感じ)
頂点数や三角形の数を表示
Hierarchy上に頂点数や三角形の数を表示する事が出来ます。
設定されているコンポーネントの表示
Hierarchy上にオブジェクトに設定されているコンポーネントのアイコンを表示する事が出来ます。
Favorites Tab[s] (ProjectやHierarchyにお気に入り機能を追加)
Favorites Tab[s]はProjectとHierarchyを拡張するアセットで、
アセットやオブジェクトのお気に入り機能を追加し、いつでも簡単に見つけられるようにします。
Favorites Tab[s] - Asset Store |
お気に入り登録
Favorites Tab[s]をインストールすると、選択しているアセットの右側に星が表示されるようになります。
これをクリックする事でお気に入り登録するという感じです。
星を付けて登録した物の一覧はWindow -> Favoritesから開けるウィンドウで確認出来ます。
また、ウィンドウに表示されてるファイルをクリックするとProjectウィンドウで開く事も可能で、
シーンの場合はそのまま開けます。
この時、シーンに変更がある場合は保存の確認もしてくれます。
さらにHierarchyのオブジェクトを登録する事も可能です。
なお、そのシーンを開いてない時は非表示になります。
Editor Camera (Sceneカメラの情報を保存&復元)
Editor CameraはSceneを拡張するアセットで、
Sceneカメラの位置や角度などの情報を保存し、好きなように切り替えられるようにします。
Editor Camera - Gamestrap - Asset Store |
Sceneカメラの情報の保存と復元
ウィンドウの上部にあるボタンをクリックするとSceneViewカメラの情報を保存、
右クリックすると保存した情報を削除出来ます。
また、保存されたボタンを押すとカメラの情報が復元されます。
(Alt(MacならOption) + 数字のショートカットで復元する事も可能)
さらに選択中の(太字になってる)ボタンを押すと、選択前の状態に戻せます。
なお、ボタンの名前や色は自由に変えられます。
ちなみに、情報はシーンごとに保存されています。
GameとSceneのカメラを同期
カメラアイコンが付いてるボタンを押すことで、
GameViewとSceneViewのカメラを同期(同じ所を映す)する事が出来ます。
(左がSceneをGameに合わせる、右がGameをSceneに合わせる)
ボタンの右にあるトグルを押せば、ずっと同期し続ける事も出来ます。
GameViewSizeChanger (Gameの画面サイズを瞬時に変更、縦横切り替えとSafeAreaに対応)
GameViewSizeChangerはGameを拡張するアセットで、
画面サイズを瞬時に色々な端末のものに変更できる/span>ようにします。
なお、Unity Asset StoreではなくGitHubで公開されています。
画面サイズの変更と登録
GameViewSizeChangerは縦横切り替えに対応してますし、なんとiPhoneXのSafeAreaも対応しています。
(ただ、黒スキンだとちょっと見にくい)
また、SafeArea部分はGUI.DrawTextureで直接描画しているため、
シーンに余計なオブジェクトが追加されているわけではありません。
なお、表示する端末の追加や削除をしたい場合はGameViewSizeChanger.csにある
applyersに追加するものを変更すればOKです。
おわりに
エディタ拡張系は無くても基本的に問題ないですが、あると効率が上がるものばかりです。
そしてその便利さは使ってみないと分からなかったりもするので、一度試してみる事をオススメします。
また「ちょっとした機能が欲しい、自動化したい」みたいな時に
自分で拡張出来るようになるとグッと開発が楽になるので、こちらもオススメです。
(開発を効率化するためといって、拡張に時間をかけ過ぎては本末転倒ですが……)