Odin Inspectorとは?

Odin Inspector and Serializerは、Unityのインスペクターを「属性を付けるだけ」で強化できるエディタ拡張アセットです。

開発元はデンマークのSirenixで、エディタ拡張系のアセットとしては定番中の定番といえる存在です。

このブログでは、これまでにエディタ拡張のいろいろな手法を紹介してきました。

インスペクターの見た目を整える属性、PropertyDrawerによるフィールドの描画、専用ウィンドウを作るEditorWindowなど、Unityには標準で拡張の仕組みが用意されています。

ただ、これらを本格的に使い込もうとすると、それなりにコードを書く必要があります。

「もっと手早く、見やすいインスペクターを作りたい」と思ったときの選択肢がOdin Inspectorです。

公式サイトはこちら:

エディタ拡張、これまでの手法をおさらい

Odinの話に入る前に、Unity標準でできることを軽く振り返ってみます。

  • HeaderTooltipRangeといった属性で、インスペクターの表示を整える
  • PropertyDrawerで、特定の型やフィールドの描画を自分で書く
  • EditorWindowを継承して、専用のツールウィンドウを作る
  • CustomEditorで、コンポーネントのインスペクター全体を作り替える

それぞれの詳しい使い方は、過去の記事で解説しています。

それぞれ便利ではあるのですが、たとえば「条件によってフィールドを出し分けたい」「リストをテーブル状に並べたい」といった凝ったことをやろうとすると、Editorを継承したクラスを書いたり、EditorGUILayoutを細かく叩いたりする手間が増えていきます。

Odin Inspectorは、こうした「ちょっと凝ったインスペクター」を、コードを書かずに属性だけで実現してくれます。

Odinなら属性を足すだけ

Odinの中心になるのは、100種類以上の属性です。

フィールドやメソッドに属性を付けるだけで、インスペクターの見た目や挙動が変わります。CustomEditorを継承したクラスは必要ありません。

たとえば、ボタンをインスペクターに置いてメソッドを実行したいときは[Button]を付けるだけです。

using Sirenix.OdinInspector;
using UnityEngine;

public class EnemySpawner : MonoBehaviour
{
    [SerializeField] private int _spawnCount = 5;

    // インスペクターにボタンが表示され、押すとメソッドが実行される
    [Button]
    private void Spawn()
    {
        Debug.Log($"{_spawnCount}体スポーンしました");
    }
}

条件によってフィールドを出し分けたいときは[ShowIf]を使います。

using Sirenix.OdinInspector;
using UnityEngine;

public class WeaponSetting : MonoBehaviour
{
    [SerializeField] private bool _useCharge;

    // _useChargeがtrueのときだけ表示される
    [ShowIf("_useCharge")]
    [SerializeField] private float _chargeTime;
}

代表的な属性をいくつか挙げておきます。

  • [Button] … インスペクターにボタンを追加してメソッドを実行
  • [ShowIf] / [HideIf] … 条件によってフィールドを表示・非表示
  • [TableList] … リストをテーブル形式で表示
  • [FoldoutGroup] / [TabGroup] … フィールドをグループ化して整理
  • [Required] … 未設定の参照を警告表示
  • [InlineEditor] … 参照先アセットのインスペクターをその場に展開

標準の属性の延長線上にありながら、表現できる幅がぐっと広がる、という感覚です。

もうひとつの武器、Odin Serializer

Odinのもうひとつの柱がOdin Serializerです。

これは、Unity標準のシリアライザーが苦手とする型を扱えるようにする独自のシリアライザーです。

Unity標準では、Dictionaryやインターフェイス型、ポリモーフィズム(多態)を持つフィールドはSerializeFieldを付けてもインスペクターに表示されず、保存もされません。

Odin Serializerを使うと、これらがそのまま扱えるようになります。

using System.Collections.Generic;
using Sirenix.OdinInspector;
using Sirenix.Serialization;
using UnityEngine;

// SerializedMonoBehaviourを継承するとOdinのシリアライズが使えるようになる
public class ItemDatabase : SerializedMonoBehaviour
{
    // [OdinSerialize]を付けると、標準では保存できないDictionaryも保存・表示できる
    [OdinSerialize] private Dictionary<string, int> _itemPrices = new();
}

Dictionaryをインスペクターで編集したいがために、わざわざ専用のクラスやエディタを書いた経験がある人なら、この手軽さは刺さるはずです。

なおOdin Serializerビルド(ランタイム)でも動作します。エディタ専用ではないので、セーブデータの保存などにも使えます。

ただしIL2CPPなどのAOTプラットフォーム向けにビルドする場合は、AOTサポート用のコード生成という追加手順が必要になる点だけ覚えておきましょう。

導入はインポートするだけ

導入そのものはとてもシンプルで、Asset Storeで購入してインポートするだけです。

  1. Asset StoreでOdin Inspector and Serializerを購入
  2. Package ManagerMy Assetsからインポート
  3. インポートが終われば、using Sirenix.OdinInspector;で属性が使えるようになる

特別な初期設定は不要で、インポート後すぐに属性を付けて試せます。この記事では導入の入り口までにとどめますが、より詳しい属性の一覧や使い方は公式ドキュメントが充実しています。

購入を考えるときの判断材料

ここからは、買うかどうかを判断するうえで知っておきたいポイントを整理します。

価格と元の取れ方

Odin Inspectorの通常価格は60ドル前後です(2026/7現在)。

Asset Storeでは頻繁にセールが行われ、半額程度になることもあります。最新の価格は必ずストアのページで確認してください。

決して安いアセットではありませんが、ツールやデータ駆動の仕組みを自作する機会が多いプロジェクトなら、エディタ拡張に費やす時間を考えると十分に元が取れる価格帯です。

逆に、インスペクターをほとんどいじらない小規模な開発であれば、標準の属性で足りる場面も多いでしょう。

ライセンスに注意

Odinは購入前にライセンス形態を確認しておくことを強くおすすめします。注意したい点が2つあります。

ひとつはシート単位(per-seat)のライセンスである点です。Odinが含まれるプロジェクトでUnityエディタを触る人は全員ライセンスが必要で、Odinを直接操作しないアーティストも対象に含まれます。

もうひとつは収益による制限です。過去12か月の収益または資金調達が20万ドルを超える組織は、買い切りのPersonalライセンスが使えず、年間サブスクリプションのEnterpriseライセンスが必要になります。

個人や小規模チームならPersonalで問題ありませんが、規模の大きいチームや収益のある事業で使う場合は、ライセンス条件を事前に必ず確認しておきましょう。

向いている人

  • エディタ拡張やツール作成を頻繁に行う
  • Dictionaryや多態を含むデータ構造をインスペクターで扱いたい
  • インスペクターの見た目を整える時間を短縮したい

このあたりに当てはまるなら、導入を検討する価値は十分にあります。

購入前に試したい場合は、公式サイトで90日間の無料トライアルも配布されています。

まとめ

Odin Inspector and Serializerは、これまで紹介してきたエディタ拡張の手法を、属性ベースで一気に楽にしてくれるアセットです。

CustomEditorを書かずに凝ったインスペクターが作れること、そして標準では扱えない型をシリアライズできること、この2点が大きな魅力です。

インスペクターやエディタ拡張に時間を取られていると感じているなら、有力な選択肢になります。

価格やライセンス条件を確認したうえで、自分のプロジェクトに見合うかどうかを判断してみてください。