🎄

2021 年の Odin Inspector 事情

2021/12/18に公開

本稿は「Applibot Advent Calendar 2021」の 18 日目の記事です。
前日は @nodarby さんの「大学で企業のセキュリティの研究をやってた話」という記事でした!

はじめに

皆さんは Odin Inspector を使っていますか?
Odin Inspector は Unity の有名なプラグインであり、導入することで Unity エディタを簡単に拡張できるようになります。
最近 Odin Inspector は Unity の公認ソリューションパートナー( VSP )になったため、今後も保守されていく信頼できるプラグインです。

私も普段から趣味の開発で使用しているのですが、導入したことによって大幅に作業を効率化できた実感があります。
以前から有名な Odin Inspector ですが、 2020 年の 10 月にはバージョン 3.0 がリリースされました。
バージョン 3.0 では様々な新機能の実装やパフォーマンスの改善が行われたのですが、合わせてライセンスの形態が変更されました。
新しいライセンス形態ではいくつか気をつけなければならない点が存在するので、本稿ではそちらについて解説していきます。

Odin Inspector の新しいライセンスについて

バージョン 2.X までの Odin Inspector は Unity Asset Store で購入するのが一般的であり、$60.50 の買い切り形式でした。
バージョン 3.0 では従来の形式に加えて Odin Enterprise というライセンスが追加となり、EULA に付随する変更が加えられています。
https://odininspector.com/eula

過去 12 ヶ月間の収益または資金が $200,000 を超えているプロジェクトは Odin Enterprise ライセンスを使用する必要があり、年間 $250/シート の使用料が必要になります。

趣味の開発で収益が $200,000 を超えることは稀だと思うのですが、業務で使用する場合は Odin Enterprise ライセンスが必要になる場合が多そうです。

以下の説明によると、 Unity Editor を使用するエンジニアやアーティスト全員分のライセンスが必要になるため、プロジェクトの規模によっては大きなコストになる可能性があります。
https://odininspector.com/pricing#how-many-seats

Odin Inspector is sold as a per-seat license, meaning you need a license for every person working with the Unity Editor on a project that has Odin included. This includes artists who work within Unity, even if they do not directly interact with tools built with Odin Inspector. An exception is made for build farm servers and VMs running Odin, which do not require extra seats.

Odin Inspector のバージョン 3.0 を使うべきか

趣味の開発や小規模なチームであれば Odin Inspector の使用やバージョンアップは問題ないと思われますが、 Odin Enterprise ライセンスを必要とする場合はコストとパフォーマンスを天秤にかけて慎重に検討する必要がありそうです。

以前から Odin Inspector のバージョン 2.X 以下を使用していた場合は買い切り形式のまま使い続けることも可能ですが、バージョン 2.X 系が保守されるかは不明なため Unity Editor のアップデートにより動作しなくなる懸念があります。
実際 Unity Editor のアップデートで Inspector からリストの並び替えができるようになった際に Odin Inspector が動作しなくなった経験があるため、バージョン 2.X に依存したまま長期の運用を行うのは大きなリスクとなるかもしれません。

また、現在 Unity Asset Store から Odin Inspector のバージョン 2.X 系を購入やダウンロードすることはできないため、バージョン 2.X から 3.0 にアップデートする際は注意が必要です。

Odin Inspector の代替について

Odin Inspector のように Unity Editor を拡張する手段はいくつかあります。
Unity 標準の UI Toolkit(旧称 UI Elements)は自由度が高いため、Odin Inspector と同様のエディタを実装することは可能かもしれません。
しかし現状では Odin Inspector ほど簡単にエディタ拡張を実装することは難しいため工数と相談する必要があります。
Odin Inspector で簡単に実装できて UI Toolkit で実装工数がかかりそうなものとしては以下があります。

Tab


Odin Inspector でこのようなタブは以下のコードで実装できます。

コード
[TitleGroup("Tabs")]
[HorizontalGroup("Tabs/Split", Width = 0.5f)]
[TabGroup("Tabs/Split/Parameters", "A")]
public string NameA, NameB, NameC;

[TabGroup("Tabs/Split/Parameters", "B")]
public int ValueA, ValueB, ValueC;

[TabGroup("Tabs/Split/Buttons", "Responsive")]
[ResponsiveButtonGroup("Tabs/Split/Buttons/Responsive/ResponsiveButtons")]
public void Hello() { }

[ResponsiveButtonGroup("Tabs/Split/Buttons/Responsive/ResponsiveButtons")]
public void World() { }

[ResponsiveButtonGroup("Tabs/Split/Buttons/Responsive/ResponsiveButtons")]
public void And() { }

[ResponsiveButtonGroup("Tabs/Split/Buttons/Responsive/ResponsiveButtons")]
public void Such() { }

[Button]
[TabGroup("Tabs/Split/Buttons", "More Tabs")]
[TabGroup("Tabs/Split/Buttons/More Tabs/SubTabGroup", "A")]
public void SubButtonA() { }

[Button]
[TabGroup("Tabs/Split/Buttons/More Tabs/SubTabGroup", "A")]
public void SubButtonB() { }

[Button(ButtonSizes.Gigantic)]
[TabGroup("Tabs/Split/Buttons/More Tabs/SubTabGroup", "B")]
public void SubButtonC() { }

一方 UI Toolkit の標準には Tab の仕組みがまだないため、一から実装するか以下のようなアセットを使用する必要があります。
https://assetstore.unity.com/packages/tools/gui/uielements-expansions-tabs-accordion-163803

TreeView


Odin Inspector でこのような TreeView は以下のコードで実装できます。

コード
OdinMenuTree tree = new OdinMenuTree(supportsMultiSelect: true)
{
    {"Home", this, EditorIcons.House},
    {"Odin Settings", null, EditorIcons.SettingsCog},
    {"Odin Settings/Color Palettes", ColorPaletteManager.Instance, EditorIcons.EyeDropper},
    {"Odin Settings/AOT Generation", AOTGenerationConfig.Instance, EditorIcons.SmartPhone},
    {"Camera current", Camera.current},
};

tree.AddAllAssetsAtPath("Some Menu Item", "Some Asset Path", typeof(ScriptableObject), true)
    .AddThumbnailIcons();
tree.AddAssetAtPath("Some Second Menu Item", "SomeAssetPath/SomeAssetFile.asset");
var customMenuItem = new OdinMenuItem(tree, "Menu Style", tree.DefaultMenuStyle);
tree.MenuItems.Insert(2, customMenuItem);
tree.Add("Menu/Items/Are/Created/As/Needed", new GUIContent());
tree.Add("Menu/Items/Are/Created", new GUIContent("And can be overridden"));

tree.DrawMenuTree();

Unity 2022.1 以降であれば UI Toolkit でも TreeView が使用できるのですが、それ以前のバージョンでは asmdef やリフレクションを用いて非公開な API を使用する必要があります。
https://forum.unity.com/threads/treeview-element.667324/

まとめ

本稿では 2021 年の Odin Inspector 事情について解説しました。
とても便利な Odin Inspector ですが、業務など大きなプロジェクトで使用する場合はコスト面の注意が必要そうです。

また、今後は UI Toolkit など Odin Inspector 以外の選択肢も視野に入れるべきだと感じたので、それぞれの Pros/Cons を考慮して採用するものを選択していきたいですね。
私の趣味の開発では引き続き活用していこうと思っているので、また大きな変更があればまとめて記事にしたいと思っています。

以上、「Applibot Advent Calendar 2021」 18 日目の記事でした!

Discussion