(:3[kanのメモ帳]

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

Inspectorを圧倒的に使いやすくするOdin【Unity】【アセット】【エディタ拡張】【属性】


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



この記事でのバージョン
Unity 2017.2.0f3


はじめに

今回はInspectorを圧倒的に使いやすくするOdinというアセットの紹介です!


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

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


f:id:kan_kikuchi:20171127084846j:plain


使うとどんな感じになるのかかは、公式サイトを見ると分かりやすいです。

例がアニメーションやシンプルなコード付きなので、なんとなく雰囲気掴めると思います。



f:id:kan_kikuchi:20171127071337g:plain
f:id:kan_kikuchi:20171127071149g:plain


なお、12/09の16:59までサイバーマンデーMEGAセール30%OFFです。


導入

導入の仕方は他のアセットと同じく、Asset Storeからインポートするだけ。


f:id:kan_kikuchi:20171127074358j:plain


なお、サンプルが大量にあるので、使い方で困るという事もないと思います。


f:id:kan_kikuchi:20171127075253j:plain
f:id:kan_kikuchi:20171127075651g:plain


使い方

機能が多く、流石に全部は紹介しきれないので、

個人的に良さそうだと思った機能や属性を抜粋して紹介します。


なお、ドキュメントは以下のページです。

Sirenix - Odin Inspector : AssetListAttribute


List (導入するだけでいい感じに)

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

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

f:id:kan_kikuchi:20171127084846j:plain


なお、Vector3やQuaternionなども導入するだけでInspector上の見た目が変わります。


SerializedMonoBehaviour (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


ReadOnly (編集出来ないように)

ReadOnlyを使うとInspector上で編集不可に出来ます。

[ReadOnly]
public int ReadOnlyNum = 100;

f:id:kan_kikuchi:20171127090158j:plain


ShowInInspector (プロパティまで表示)

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

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

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

f:id:kan_kikuchi:20171127090802j:plain


値を変更出来ると紛らわしいので、ReadOnlyと併用するのがオススメ。

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

f:id:kan_kikuchi:20171127090813j:plain


HideLabel (ラベルを非表示)

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

[HideLabel]
public string HideLabelTest = "HideLabel";

f:id:kan_kikuchi:20171127091048j:plain


LabelText (ラベルを自由に設定)

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

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

f:id:kan_kikuchi:20171127091145j:plain


Indent (インデントの設定)

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


Button (メソッドを実行するボタン)

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

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

f:id:kan_kikuchi:20171127091657j:plain


BoxGroup, FoldoutGroup, TabGroup (グループ化)

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


Editor Only Mode

インポート後、Tools -> Odin Inspector -> Preferencesで各設定をする事が出来ます。


f:id:kan_kikuchi:20171127080340j:plain


その中に、Editor Only Modeという機能があり、

これを有効にする事でエディタ上だけで機能するように出来ます。

色々なプラットフォームに対応しているとは言え、不具合が出る可能性がないわけではないので、

心配な人は有効にしておくと良いかもしれません。


f:id:kan_kikuchi:20171127080550j:plain


ただし、有効にすると使えない機能(SerializedMonoBehaviourとか)も出てくるので、注意が必要です。


f:id:kan_kikuchi:20171127081728j:plain


なお、Editor Only Modeで使えない機能を使っている場合は警告文が出ますし、

なによりビルド時にエラーが出て通らなくなるので、気付かない事は無いと思います。


実行ファイルの容量

Odinは導入すると実行ファイルの容量が増える(Macで約0.5MB)ので、注意が必要です。


f:id:kan_kikuchi:20171127082550j:plain


なお、上記のEditor Only Modeを有効にしておけば増えません。


おわりに

Odinは属性だけで80もあるので、まだまだ把握しきれていません。

いつか「Odinの全属性一覧」とか「Odinの全機能一覧」とかの

記事が書ければ良いなーと思っている今日このごろです(:3っ)∋〜