[Unity] Enumをインスペクターに日本語表示する方法

Unity

Unityでゲームを作っていると、システムの複雑化に伴ってenumを使いたくなる場面が増えてきます。
私が今作っているゲームでも、大量の要素を持たせたenumを使う機会がありました。
たとえば、カテゴリやタグとして使うための列挙型を用意したら、あっという間に30項目以上になってしまい…。

最初は英語で書かれたenumをそのままインスペクターに表示して、選んで使っていたのですが、これが意外と曲者でした。
私自身英語がかなり苦手ということもあり、英語表記が直感的でないため、選択ミスや設定ミスが頻発してしまったのです…!
似たような形の英単語や、同じアルファベット始まりの別単語を選んでいたりと、小さな混乱が積もり積もって地味にストレスに…。

日本語表示にすればいいじゃん

「どうにか日本語で表示できないかな…?」と調べてみたところ、なんとUnityではInspectorNameという属性を使うことで、インスペクター上の表示をカスタマイズできることがわかりました。

使い方はとてもシンプルです。

public enum DungeonTheme
{
    [InspectorName("火山")]        // InspectorName Attributeと表示したいテキストを記載
    Volcano,
    [InspectorName("氷の洞窟")]
    Ice,
    [InspectorName("闇の迷宮")]
    Darkness
}

このようにenumの各値に[InspectorName("表示名")]を付けるだけで、インスペクター上では英語ではなく日本語が表示されます。

これが…

こうなります!

実際の表示もちゃんと「火山」「氷の洞窟」「闇の迷宮」となり、非常に見やすく、選び間違いの心配もグッと減りました。
(Volcano、Ice、Darknessの3つの例だとそこまで間違うことは無いのかなと思いますがw)

InspectorName Attribute

InspectorName Attribute は Unity 2021.2 から追加された機能で、今一般的に使用されているUnityプロジェクトであれば基本的に使えます。
メリットとしては、コードは英語で管理しつつ、エディタでは日本語でわかりやすく扱えるということですかね。しかも簡単に。
注意点としては、逆に、インスペクターでの表示専用のようなので、ToString() したときには上の例の場合だと「闇の迷宮」ではなく、「Darkness」等の英語表記が返る感じですね。
むしろ、表示上だけ日本語にしたい、という条件であればバッチリあいますね。

今までずーっと、Unity2022 使ってたけど全然知りませんでした…

まとめ

Unityでは、enum[InspectorName]属性を付けることで、インスペクター上の表示名を日本語に変更できます。
ちょっとした工夫ですが、使いやすさ・ミスの削減・開発効率の向上に繋がるおすすめテクニックですね。

今回のように、表示名を日本語にできると、タグや属性の選択ミスが減り、作業効率もアップ!…するはずw
今後は設定ミスでイライラする機会が減らせそうかなw
積極的に使っていきたいと思います!

—–

どうやら PropertyDrawer を使うパターンもあるようですが、そちらは 2021以前のバージョンでもいけるやり方らしい。
(とはいえ2022もサポート対象外になっている今では需要は無いのかな?)

コメント

タイトルとURLをコピーしました