1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

G-BlossomAdvent Calendar 2024

Day 19

Unityの便利な属性一覧

Last updated at Posted at 2024-12-18

はじめに

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の属性は、エディタ操作の効率化やコードの簡潔化に非常に役立ちます。特にプロジェクトが大規模になるほど、適切な属性を使うことで作業がスムーズになります。

この記事で紹介した属性一覧を参考に、あなたのプロジェクトで活用してみてください。もし他に便利な属性や使用例があれば、コメントで教えていただけると嬉しいです!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?