(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

どんな人&プロジェクトにもオススメできる、Unityの基本機能(ウィンドウ)を拡張するアセット6選【Unity】【アセット】【エディタ拡張】


このエントリーをはてなブックマークに追加

この記事はUnity #3 Advent Calendar 2018の12日目の記事です。


この記事でのバージョン
Unity 2018.2.17f1


はじめに

Unityはその拡張性の高さとしやすさから、

Asset Storeを中心に様々なエディタ拡張用のアセットが公開されています。


f:id:kan_kikuchi:20181211091446j:plain
Asset Store



今回はその中でも、おそらく誰でも&どんなプロジェクトでも使うであろう

Console, Inspector, Hierarchy, Project, Scene, Gameという

基本機能(ウィンドウ)を拡張するアセットと、その機能をざっくり紹介していきたいと思います。


今回紹介するアセットを全部追加する前と後を比較すると一目瞭然!


f:id:kan_kikuchi:20181211101820j:plain
f:id:kan_kikuchi:20181211101830j:plain


見た目の違いはもちろん、利便性も段違いで、デフォルトのUnityに戻れなくなること請け合いです!!


Editor Console Pro (Consoleのログ周りを拡張)

Editor Console ProはConsoleを拡張するアセットで、

ログ周りをより使いやすくしてデバッグを簡単にし、生産性を上げられるものです。

(正確にはConsoleを拡張するのではなく似たような感じだが、違うウィンドウ)


f:id:kan_kikuchi:20170819080251g:plain



ログの種類の応じて色分け

ログの種類の応じて色分けする事が可能です。

ログの種類がより強調されるので、見分けが付きやすくなります。


f:id:kan_kikuchi:20170818064451j:plain


ログの検索

ウィンドウ上部の検索窓からログを検索する事が可能です。

必要なログだけを表示できて、かなり便利。


f:id:kan_kikuchi:20170818065447g:plain


該当コードの表示とジャンプ

普通のConsoleだとログが発生した行数が順に列挙されるだけですが、

Editor Console Proならログが発生している実際のコードの表示が可能です。

どのクラスのどの箇所かが表示されるので、分かりやすいです。


f:id:kan_kikuchi:20170819072608j:plain


もちろん、該当コードへのジャンプも可能


f:id:kan_kikuchi:20170819071511g:plain


オリジナルフィルタ

ログ、警告、エラー等の基本フィルタ以外にオリジナルフィルタを作る事が可能です。

必要な情報を瞬時に選別出来るようになるので、捗ります。


f:id:kan_kikuchi:20170818071716j:plain


ログの改行表示

普通のConsoleだとログが長すぎる場合は表示仕切れなくなりますが、

Editor Console Proならログを改行して表示する事が可能です。

いちいちウィンドウのサイズを伸ばさなくていいので楽になります。


f:id:kan_kikuchi:20170819074148g:plain


ログの監視

ConsoleProDebug.Watchを使う事で変数等の監視を行う事が可能です。

逐一、値の確認が出来るようになるので、効率的です。


f:id:kan_kikuchi:20170819075234g:plain


情報の追加

表示する情報(クラス名やメソッド名等)を追加する事が可能です。

詳細を見なくてもある程度把握しやすくなるので、時間の節約になります。


f:id:kan_kikuchi:20170819084034g:plain


Odin (Inspectorの見栄え改善&属性追加)

OdinはInspectorを拡張するアセットで、

導入するだけInspectorの見栄えを良くし、更に80以上の属性を追加する事で

Inspectorを圧倒的に使いやすくします。


f:id:kan_kikuchi:20171127084846j:plain



Listを見やすく、使いやすく

Odinを導入すると何もせずともListの表示がいい感じに変わります。

[SerializeField]
private List<string> _list = new List<string>(){"test", "TEST", "Test"};

f:id:kan_kikuchi:20171127084846j:plain


なお、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}
  };

}

f:id:kan_kikuchi:20171127085206j:plain


Inspector上で編集出来ないように

ReadOnlyを使うとInspector上で編集出来ないように出来ます。

[ReadOnly]
public int ReadOnlyNum = 100;

f:id:kan_kikuchi:20171127090158j:plain


プロパティをInspectorに表示

ShowInInspectorを使うとprivate変数やプロパティをInspectorに表示できるようになります。

ただし、変更しても値は保存できないので確認専用です。

[ShowInInspector]
public Vector3 ShowInInspectorVector3{get;set;}

f:id:kan_kikuchi:20171127090802j:plain


ラベルを非表示

HideLabelを使うと変数の横に表示されるラベルを非表示できます。

[HideLabel]
public string HideLabelTest = "HideLabel";

f:id:kan_kikuchi:20171127091048j:plain


ラベルを自由に設定

LabelTextを使うと変数の横に表示されるラベルを自由に設定できます。

[LabelText("自由な名前に")]
public string LabelTextTest = "LabelTextTest";

f:id:kan_kikuchi:20171127091145j:plain


インデントの設定

Indentを使うとインデントを自由に設定できます。

[Indent(1)]
public bool Indent1 = false;
[Indent(2)]
public bool Indent2 = false;
[Indent(3)]
public bool Indent3 = false;
public bool NoIndet;

f:id:kan_kikuchi:20171127091442j:plain


メソッドを実行するボタンをInspectorに生成

Buttonを使うとメソッドを実行できるボタンを生成できます。

[Button("押して!")]
private void OnClick() {
  Debug.Log("押した!");
}

f:id:kan_kikuchi:20171127091657j:plain


グループ化

BoxGroup, FoldoutGroup, TabGroupのいずれかを使うと

変数をグループ化して表示する事ができます。

[BoxGroup("グループ1")]
public int A, B, C;

[BoxGroup("グループ2")]
public int D, E, F;

f:id:kan_kikuchi:20171127092241j:plain

[FoldoutGroup("グループ1")]
public int A, B, C;

[FoldoutGroup("グループ2")]
public int D, E, F;

f:id:kan_kikuchi:20171127092251j:plain

[TabGroup("グループ1")]
public int A, B, C;

[TabGroup("グループ2")]
public int D, E, F;

f:id:kan_kikuchi:20171127092302j:plain


QHierarchy (Hierarchyによく使用する機能を追加)

QHierarchyはHierarchyを拡張するアセットで、

Hierarchyによく使用する機能を追加する事で作業の効率化が行えます。



f:id:kan_kikuchi:20181210094732j:plain


なお、色々と機能はありますが、全部表示するとごちゃごちゃし過ぎるので、

必要に応じて切り替えて使う感じになると思います。


ツリーの表示


Hierarchyの左端にツリーを表示する事が出来ます。


f:id:kan_kikuchi:20181207143644j:plain


MonoBehaviourがアタッチされているか

MonoBehaviourのスクリプトがアタッチされているオブジェクトに色を付ける事が出来ます。


f:id:kan_kikuchi:20181207144331j:plain


オブジェクトの有効無効切り替え

オブジェクトの有効無効をHierarchy上で切り替えられるように出来ます。

(Inspectorの左上のチェックボックスと同じ感じ)


f:id:kan_kikuchi:20181207150215j:plain


なお、Shfitを押しながらクリックすると子のオブジェクトを一緒に切り替え、

Altを押しながらだと兄弟のオブジェクトを一緒に切り替える事ができます。


さらにCmd(Ctrl)を押しながらクリックすると

エディタを実行していない時だけ消し、実行時には表示されるようにも出来ます。

この状態だとアイコンには斜め線が入り、色も変わります(デフォルトでは青)。


オブジェクトを編集不可にする

オブジェクトを編集不可に出来ます。


f:id:kan_kikuchi:20181211104519j:plain


なお、Shfitを押しながらクリックすると子のオブジェクトを一緒に切り替え、

Altを押しながらだと兄弟のオブジェクトを一緒に切り替える事ができます。


missingやnullなどの検知

何かしらの問題があるオブジェクトにアイコンを表示する事が出来ます。


f:id:kan_kikuchi:20181210061651j:plain


なお、QHierarchyNullableを使えばnullになっていてもアイコンを表示しないようにも出来ます。

[QHierarchyNullable]
public GameObject Prefab;



タグとレイヤーの名前を表示、変更

Hierarchy上にオブジェクトのタグとレイヤーの名前を表示し、クリックで変更出来るように出来ます。


f:id:kan_kikuchi:20181210071318j:plain


オブジェクトのアイコン表示、変更

Hierarchy上にオブジェクトのアイコンを表示し、クリックで変更出来るように出来ます。

(Inspectorの左上で設定出来るのと同じ感じ)


f:id:kan_kikuchi:20181210074109j:plain


頂点数や三角形の数を表示

Hierarchy上に頂点数や三角形の数を表示する事が出来ます。


f:id:kan_kikuchi:20181210074811j:plain


設定されているコンポーネントの表示

Hierarchy上にオブジェクトに設定されているコンポーネントのアイコンを表示する事が出来ます。


f:id:kan_kikuchi:20181210075441j:plain


Favorites Tab[s] (ProjectやHierarchyにお気に入り機能を追加)

Favorites Tab[s]はProjectとHierarchyを拡張するアセットで、

アセットやオブジェクトのお気に入り機能を追加し、いつでも簡単に見つけられるようにします。


f:id:kan_kikuchi:20180415112816g:plain



お気に入り登録

Favorites Tab[s]をインストールすると、選択しているアセットの右側に星が表示されるようになります。

これをクリックする事でお気に入り登録するという感じです。


f:id:kan_kikuchi:20180415091541j:plain


星を付けて登録した物の一覧はWindow -> Favoritesから開けるウィンドウで確認出来ます。


f:id:kan_kikuchi:20180415090943j:plain
f:id:kan_kikuchi:20180415091838j:plain


また、ウィンドウに表示されてるファイルをクリックするとProjectウィンドウで開く事も可能で、


f:id:kan_kikuchi:20180415105502g:plain


シーンの場合はそのまま開けます。

この時、シーンに変更がある場合は保存の確認もしてくれます。


f:id:kan_kikuchi:20180415105641g:plain


さらにHierarchyのオブジェクトを登録する事も可能です。

なお、そのシーンを開いてない時は非表示になります。


f:id:kan_kikuchi:20180415105847g:plain


Editor Camera (Sceneカメラの情報を保存&復元)

Editor CameraはSceneを拡張するアセットで、

Sceneカメラの位置や角度などの情報を保存し、好きなように切り替えられるようにします。


f:id:kan_kikuchi:20180917072235g:plain



Sceneカメラの情報の保存と復元

ウィンドウの上部にあるボタンをクリックするとSceneViewカメラの情報を保存、

右クリックすると保存した情報を削除出来ます。


f:id:kan_kikuchi:20180916115858j:plain


また、保存されたボタンを押すとカメラの情報が復元されます。

(Alt(MacならOption) + 数字のショートカットで復元する事も可能)


f:id:kan_kikuchi:20180916120500g:plain


さらに選択中の(太字になってる)ボタンを押すと、選択前の状態に戻せます。


f:id:kan_kikuchi:20180916122518g:plain


なお、ボタンの名前や色は自由に変えられます。


f:id:kan_kikuchi:20180916120731j:plain


ちなみに、情報はシーンごとに保存されています。


f:id:kan_kikuchi:20180916134425g:plain


GameとSceneのカメラを同期

カメラアイコンが付いてるボタンを押すことで、

GameViewとSceneViewのカメラを同期(同じ所を映す)する事が出来ます。

(左がSceneをGameに合わせる、右がGameをSceneに合わせる)


f:id:kan_kikuchi:20180917063608j:plain
f:id:kan_kikuchi:20180917065445g:plain


ボタンの右にあるトグルを押せば、ずっと同期し続ける事も出来ます。


f:id:kan_kikuchi:20180917064808j:plain
f:id:kan_kikuchi:20180917065849g:plain


GameViewSizeChanger (Gameの画面サイズを瞬時に変更、縦横切り替えとSafeAreaに対応)

GameViewSizeChangerはGameを拡張するアセットで、

画面サイズを瞬時に色々な端末のものに変更できる/span>ようにします。

なお、Unity Asset StoreではなくGitHubで公開されています。


f:id:kan_kikuchi:20181105115817g:plain



画面サイズの変更と登録

GameViewSizeChangerは縦横切り替えに対応してますし、なんとiPhoneXのSafeAreaも対応しています。

(ただ、黒スキンだとちょっと見にくい)


f:id:kan_kikuchi:20181105091051g:plain


また、SafeArea部分はGUI.DrawTextureで直接描画しているため、

シーンに余計なオブジェクトが追加されているわけではありません。


f:id:kan_kikuchi:20181105090416j:plain


なお、表示する端末の追加や削除をしたい場合はGameViewSizeChanger.csにある


f:id:kan_kikuchi:20181105085910j:plain


applyersに追加するものを変更すればOKです。


f:id:kan_kikuchi:20181105121432j:plain
f:id:kan_kikuchi:20181105121444j:plain


おわりに

エディタ拡張系は無くても基本的に問題ないですが、あると効率が上がるものばかりです。

そしてその便利さは使ってみないと分からなかったりもするので、一度試してみる事をオススメします。








また「ちょっとした機能が欲しい、自動化したい」みたいな時に

自分で拡張出来るようになるとグッと開発が楽になるので、こちらもオススメです。

(開発を効率化するためといって、拡張に時間をかけ過ぎては本末転倒ですが……)


f:id:kan_kikuchi:20181127050927j:plain