はじめに
Unityには、スクリプトをより便利に、そして効率的に書けるようにするための属性(Attribute)が用意されています。これらの属性を活用することで、インスペクターでの操作性を向上させたり、エディタ拡張を簡単に実現できます。
この記事では、Unityでよく使用される属性について、それぞれの機能を簡単にまとめた一覧をご紹介します。開発の参考にぜひご活用ください!
一覧
以下は、Unityでよく使われる属性の説明をカテゴリごとにまとめたものです。
カテゴリ | 属性名 | 説明 |
---|---|---|
シリアライズとインスペクター関連 | [SerializeField] |
プライベートなフィールドをインスペクターで編集可能にする。 |
[HideInInspector] |
public フィールドをインスペクターで非表示にする。 |
|
[NonSerialized] |
フィールドがシリアライズされないようにする。 | |
データ検証と制限 | [Range(min, max)] |
数値の範囲を制限してスライダーをインスペクターに表示する。 |
[Min(value)] |
フィールドの最小値を指定する(インスペクターでも値を制限)。 | |
[Max(value)] |
フィールドの最大値を指定する(インスペクターでも値を制限)。 | |
[Multiline] |
string 型に適用し、インスペクターで複数行入力が可能なエリアを表示する。 |
|
[TextArea(min, max)] |
string 型に適用し、指定したサイズでテキスト入力フィールドをインスペクターに表示する。 |
|
スクリプトとエディタ関連 | [ExecuteInEditMode] |
スクリプトがエディタモードでも実行されるようにする。 |
[ExecuteAlways] |
常にスクリプトを実行する(エディタモード・プレイモード問わず)。 | |
[RequireComponent] |
指定したコンポーネントを自動的に追加する。 | |
[AddComponentMenu] |
コンポーネントメニューで表示する際の位置や名前を変更する。 | |
[DisallowMultipleComponent] |
同じスクリプトが複数回アタッチされないよう制限する。 | |
[DefaultExecutionOrder] |
スクリプトの実行順序を指定する。 | |
[HelpURL] |
コンポーネントのインスペクターにヘルプリンクを追加する。 | |
描画とデバッグ | [Gizmo] |
シーンビューでカスタムのギズモを描画する際に使用。 |
[ContextMenu] |
インスペクターのコンポーネントメニューにカスタムメソッドを追加する。 | |
[ContextMenuItem] |
インスペクター上のフィールドに関連するメニュー項目を追加する。 | |
[Tooltip] |
インスペクターのフィールドにマウスオーバーしたときに表示される説明文を設定する。 | |
その他特殊な属性 | [Obsolete] |
非推奨のメソッドやクラスをマークし、警告メッセージを表示する。 |
[Header] |
インスペクターでセクションのタイトルを追加する。 | |
[Space] |
インスペクターで指定した高さ分のスペースを追加する。 | |
[FormerlySerializedAs] |
名前変更前のフィールド名を保持して、既存のシリアライズデータとの互換性を維持する。 | |
[HideFlags] |
オブジェクトの表示/隠蔽フラグを設定する(エディタ専用)。 |
使用例
ここでは、Unityの属性の中からいくつかをピックアップし、実際にどう使うのかをコードで説明します。
1. [SerializeField]
を使ったプライベート変数のインスペクター表示
[SerializeField]
を使えば、プライベートな変数をインスペクター上で編集可能にできます。これにより、カプセル化を維持しつつ値を外部から調整できます。
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField]
private int health = 100; // インスペクターで編集可能だが、外部スクリプトからは直接アクセス不可
[SerializeField]
private GameObject weapon; // インスペクターでオブジェクトを割り当て可能
}
2. [Range]
を使ったスライダーの表示
[Range]
を使うと、指定した数値範囲内でインスペクター上にスライダーを表示できます。
using UnityEngine;
public class Enemy : MonoBehaviour
{
[Range(0, 100)]
public int speed = 50; // スライダーで0~100の範囲内で値を設定可能
[Range(0f, 1f)]
public float attackRate = 0.5f; // 0~1の範囲でスライダー表示
}
3. [Tooltip]
を使った説明の追加
[Tooltip]
を使うことで、フィールドにマウスオーバーしたときに説明を表示できます。チームメンバーや他の開発者に意図を伝えるのに便利です。
using UnityEngine;
public class Enemy : MonoBehaviour
{
[Range(0, 100)]
public int speed = 50; // スライダーで0~100の範囲内で値を設定可能
[Range(0f, 1f)]
public float attackRate = 0.5f; // 0~1の範囲でスライダー表示
}
さいごに
Unityの属性は、エディタ操作の効率化やコードの簡潔化に非常に役立ちます。特にプロジェクトが大規模になるほど、適切な属性を使うことで作業がスムーズになります。
この記事で紹介した属性一覧を参考に、あなたのプロジェクトで活用してみてください。もし他に便利な属性や使用例があれば、コメントで教えていただけると嬉しいです!