【VRChat】Attributesを活用する:UdonSynced・Header・Rangeの使い方

作成: 2025-12-19

UdonSharpで使える属性(Attributes)の一覧と活用法。[UdonSynced]による同期、[Header][Tooltip][Range]によるInspector整理、開発効率の向上。

概要

UdonSharpのコードを書いていると、[UdonSynced]のように、クラスや変数の宣言の前に角括弧 [] で囲まれた記述を目にすることがあります。これは属性 (Attribute) と呼ばれるもので、コードそのもののロジックを変えるのではなく、そのコード要素(クラス、メソッド、変数など)に追加情報やメタデータを付与する役割を持ちます。

属性を使いこなすことで、UdonSharpの同期機能を有効にしたり、UnityエディタのInspectorウィンドウを格段に分かりやすく整理したりすることができ、開発効率とメンテナンス性を向上させることができます。

本記事では、UdonSharp開発で特に役立つ重要な属性について、その機能と使い方を解説します。

UdonSharp特有の属性

まずは、UdonSharpの機能に直接関わる属性です。

[UdonSynced]

  • 機能: 変数をネットワーク同期の対象にします。
  • 対象: フィールド(変数)。
  • 解説: これまでに何度も登場した、ネットワーク同期の基本となる属性です。この属性を付けた変数は、所有者による変更がインスタンス内の全プレイヤーに反映されるようになります。
[UdonSynced]
private int syncedScore = 0;

[RecursiveSync]

  • 機能: [UdonSynced]属性が付けられた変数が、子オブジェクトのUdonSharpBehaviourにある場合でも同期を試みるようにします。
  • 対象: クラス。
  • 解説: 通常、[UdonSynced]変数は同じGameObjectにアタッチされたUdonSharpBehaviour内でのみ同期されます。この属性をクラスに付けると、そのGameObjectの子オブジェクトに含まれるUdonSharpBehaviourの同期変数もまとめて同期の対象に含めることができます。複雑な階層構造を持つオブジェクトで便利ですが、パフォーマンスへの影響も考慮する必要があります。
[UdonBehaviourSyncMode(BehaviourSyncMode.Continuous)]
[RecursiveSync]
public class ParentObject : UdonSharpBehaviour
{
    // ...
}

Inspector表示を改善する属性

以下の属性は、publicで宣言された変数がUnityエディタのInspectorウィンドウでどのように表示されるかを制御します。これにより、他の人が見ても分かりやすい、設定ミスをしにくいギミックを作ることができます。

[Header("見出し")]

  • 機能: Inspectorに関連する変数のグループの前に、太字の見出しを表示します。
  • 対象: フィールド(変数)。
  • 解説: 複数の設定項目を機能ごとにグループ分けするのに非常に便利です。

[Tooltip("説明文")]

  • 機能: Inspectorで変数名にマウスカーソルを合わせると、説明文(ツールチップ)を表示します。
  • 対象: フィールド(変数)。
  • 解説: その変数が何のための設定なのか、どのような値を設定すべきかを説明するのに役立ちます。

[Space]

  • 機能: Inspectorに空白行を挿入し、設定項目の間にスペースを設けます。
  • 対象: フィールド(変数)。

[Range(最小値, 最大値)]

  • 機能: int型またはfloat型の変数を、スライダーで調整できるようにします。
  • 対象: intまたはfloat型のフィールド。
  • 解説: 設定値の範囲を制限できるため、不正な値(例: 負の速度)が設定されるのを防ぐことができます。

[HideInInspector]

  • 機能: publicで宣言された変数を、Inspectorに表示しないようにします。
  • 対象: フィールド(変数)。
  • 解説: 他のスクリプトからはアクセスさせたいが、Inspectorで手動設定する必要はない(または、してほしくない)場合に使用します。

属性の組み合わせ使用例

これらの属性を組み合わせることで、以下のように非常に分かりやすいInspectorを構築できます。

using UdonSharp;
using UnityEngine;

public class AttributeExample : UdonSharpBehaviour
{
    [Header("移動設定")]
    [Tooltip("プレイヤーの基本移動速度を設定します。")]
    [Range(1.0f, 10.0f)]
    public float moveSpeed = 3.0f;

    [Tooltip("プレイヤーのダッシュ時の移動速度を設定します。")]
    [Range(1.0f, 20.0f)]
    public float dashSpeed = 6.0f;

    [Space]

    [Header("オブジェクト参照")]
    [Tooltip("プレイヤーがリスポーンする地点のTransformを割り当ててください。")]
    public Transform spawnPoint;

    // publicだがInspectorには表示したくない内部的な変数
    [HideInInspector]
    public bool isInitialized = false;
}

このスクリプトをアタッチしたオブジェクトのInspectorは、見出しやスライダー、ツールチップによって非常に整理され、直感的に設定できるようになります。

まとめ

  • 属性は、コードにメタデータを追加し、UdonSharpやUnityエディタの挙動を変化させるための強力なツールです。
  • [UdonSynced]は、変数をネットワーク同期させるためのUdonSharpの基本属性です。
  • [Header], [Tooltip], [Range]などの属性を使いこなすことで、UnityエディタのInspectorを劇的に分かりやすくし、共同作業や将来のメンテナンスを容易にすることができます。
  • 適切に属性を活用することは、高品質で再利用性の高いギミックを制作するための重要なテクニックです。

これらの属性は、スクリプトのロジックそのものを変えるわけではありませんが、開発体験を大きく向上させます。特に複数人でワールドを制作する場合や、ギミックを配布する場合には、Inspectorを分かりやすく整備しておくことが非常に重要になります。