【Unity】インスペクター拡張用の属性まとめ!属性を使いこなしてインスペクターを見やすくしよう

C#スクリプト 属性について Unityの使い方

この記事はUnityの基本的な使い方を解説するシリーズの一つで、今回はインスペクターを拡張するための「属性について一通りご説明します。

属性とは?

C#でいうところの属性(Attribute)とは、クラスや変数などに追加の情報を与えるものです。例えば下のように変数の前に[Range]という属性をつけると…

[Range(0, 10)]
public int range = 0;

インスペクター上で変数が単なる数値ではなく、範囲制限付きのスライダーとして表示されます。

Range促成によって表示されるスライダー

Unityではこのようにインスペクター上に変数を表示・非表示したり表示方法を変更したりするための属性がいくつか用意されています。

これらをうまく使いこなせるようになると、インスペクターから値を変更するときにとても便利になるのでぜひ覚えておきましょう。

インスペクター拡張用の主な属性

それではインスペクター上での表示を変更する属性を見ていきましょう。主な属性は次の表の通りです。

属性 機能
SerializeField 変数をシリアライズする
NonSerialized 変数をシリアライズしない
Header 見出しを表示
Tooltip カーソルを合わせたときにヒントを表示
Range スライダーを表示
Min 最小値を設定
Multiline 複数行入力可能なテキストボックスを表示
TextArea スクロールバー付きのテキストボックスを表示
Space フィールドの間を空ける
HideInInspector インスペクターでその変数を表示しない

SerializeField

まずSerializeField属性をつけると、変数がシリアライズされてインスペクター上に表示されるようになります。

シリアライズとは簡単に言えば「インスペクターで設定した値を保存しておくこと」というようなニュアンスです。ただし何でもかんでもシリアライズしてインスペクター上で表示できるかというとそうでもなく、シリアライズできないものもあります(※例えばDictionaryなど)。

ちなみにpublic変数はこの属性をつけなくても勝手にシリアライズされます。

NonSerialized

次にSerializeFieldの逆バージョンとしてNonSerializedという属性もあります。これは変数をシリアライズせず、インスペクターにも表示しないための属性です。

なおこの属性を使うにはC#スクリプトの冒頭に「using System;」と書いておく必要があります。

Header

Headerは見出しを表示する属性です。インスペクターに項目がずらっと並んでいるだけだと見づらいのですが、これでまとまりごとに見出しを設定するとかなり見やすくなります。

[Header("テスト見出し1")]

Tooltip

Tooltipは、カーソルをインスペクターの項目名の上に合わせたときにツールチップを表示する属性です。補助的に説明を表示させたいときに使います。

[Tooltip("これはツールチップのテストです。")]

Range

Rangeは冒頭の例のように項目を範囲制限つきのスライダー表示させる属性です。float型とint型の変数に使うことができます。

注意点としては、これはあくまでもインスペクター上で操作する場合の範囲制限であり、C#スクリプト上で値を変更する際は制限が効かないのでご注意ください。

Min

Minはその項目の最小値を設定できる属性です。インスペクターで操作した場合、数値がその値よりも小さくなることを防ぎます。こちらもRangeと同様にfloat型とint型の変数に使うことができます。注意点も同様で、こちらもインスペクター上でのみ制限が効きます。

Multiline

Multilineは、string型の変数のテキスト入力フィールドを複数行表示にする属性です。後述するTextAreaとは違ってスクロールバーが出ないので使い勝手はあまりよくありません。

Multiline属性による複数行入力フィールド

[Multiline]
public string text1;

TextArea

TextAreaはMultilineと同様に複数行のテキスト入力フィールドを表示させる属性です。こちらは長い文字列を入力した際にスクロールバーが表示されるのでMultilineよりも使い勝手がよいと思います。使うならこちらをお勧めします。

TextArea属性による複数行入力フィールド

[TextArea]
public string text2;

Space

Spaceはインスペクターの項目同士の間隔を大きめにとるための属性です。同じような項目がずらずらと並んでいるだけだと見づらいので、適宜この属性を使うと見やすくなります。

HideInInspector

最後にHideInInspectorはその変数をインスペクターに表示しないようにする属性です。一見するとNonSerializedと似ていますが、こちらはシリアライズの有無に関係なくインスペクターに表示しない、という点が特徴です。

例えばpublic変数を使いつつ、インスペクターからは値をいじれないようにしたい場合などに便利だと思います。

おわりに

以上、インスペクター拡張用の属性についてご説明しました。

属性を使いこなせるようになるとインスペクターの表示がよりスマートになり、Unityでの作業が捗るようになります。ぜひ上記の内容を参考にしていただき、属性を使ってみて頂ければと思います。