属性
対応(15)
Section titled “対応(15)”| 書き方 | 説明 | 注意 |
|---|---|---|
[UdonSynced] | 変数の同期 | |
[UdonSynced(UdonSyncMode.Linear)] | 補間つきの同期 | 指定できる種類は型によって違います。 |
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] | 送るタイミングの指定 | |
[UdonBehaviourSyncMode(BehaviourSyncMode.Continuous)] | 常時の送信 | |
[FieldChangeCallback(nameof(Value))] | 変更の通知 | |
[NetworkCallable] | ネットワーク越しの呼び出しの許可 | |
[RecursiveMethod] | 再帰の許可 | 引数とローカル変数の記憶域が、呼び出しごとに作られないためです。 |
[Inline] | 呼び出しの展開 | |
[SerializeField] | 非公開フィールドの表示 | |
[HideInInspector] | 公開フィールドの非表示 | |
[Header] [Tooltip] | 見出しと説明 | |
[Range(0f, 1f)] | 値の範囲の指定 | |
[Space] | 余白 | |
[SerializeField, Range(0f, 1f)] | 1 つのフィールドへの複数指定 | |
[System.Obsolete] | 非推奨の指定 |
非対応(3)
Section titled “非対応(3)”| 書き方 | 説明 | エラー | 理由 | 代替 |
|---|---|---|---|---|
private int Down(int n) { return Down(n - 1); } | 属性を付けずに自分自身を呼ぶ | TUKI0001 | 環境 | [RecursiveMethod] を付ける(ループか、自分で持つスタックで書いてもよい) |
SendCustomNetworkEvent(…, nameof(Take), 1)([NetworkCallable] 無し) | 属性を付けずに、引数つきのメソッドをネットワーク越しに名前で呼ぶ | TUKI0001 | 環境 | 受け側に [NetworkCallable] を付ける |
[DllImport("x")] | 外部のライブラリを呼ぶ | TUKI0001 | 環境 | 実行環境のメソッドを使う |
| 引数つきのメソッドの登録名 | 属性が無いと引数の型を含む名前で登録され、nameof で書いた名前と食い違うので名前では参照できません。[NetworkCallable] を付けると、書いた名前のまま登録されます |
| 同期の属性の名前空間 | この言語の名前空間から書けます。移行元の名前空間を同時に using すると、同じ名前の属性が 2 つ見える状態になってコンパイルのエラーになります(片方の using を外すと通ります。ファイル構成と名前空間) |
| この表に無い 5 つ | [Reactive]・[Computed]・[Effect]・[On] はリアクティブプログラミング、[TsukimiTest] はテストにあります |
[UdonSynced] を付けた変数の値が、プレイヤーのあいだで同じに保たれます。
using UnityEngine;using Tsukimi;
public class AttributesSynced : TsukimiBehaviour{ [UdonSynced] private int value;
void Start() { value = 1; RequestSerialization(); Debug.Log(value); // => 1 }}補間つきの同期
Section titled “補間つきの同期”UdonSyncMode で補間の種類を指定します。
using UnityEngine;using Tsukimi;
public class AttributesSyncedInterpolated : TsukimiBehaviour{ [UdonSynced(UdonSyncMode.Linear)] private float value;
void Start() { Debug.Log(value); // => 0 }}送るタイミングの指定
Section titled “送るタイミングの指定”Manual を指定すると、RequestSerialization() を呼んだときに値を送ります。
using UnityEngine;using Tsukimi;
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]public class AttributesSyncModeManual : TsukimiBehaviour{ [UdonSynced] private int value;
void Start() { value = 1; RequestSerialization(); }}Continuous を指定すると、RequestSerialization() を呼ばずに値が送られます。
using UnityEngine;using Tsukimi;
[UdonBehaviourSyncMode(BehaviourSyncMode.Continuous)]public class AttributesSyncModeContinuous : TsukimiBehaviour{ [UdonSynced] private int value;
void Start() { value = 1; }}同期で値が届くと、指定したプロパティの設定側が呼ばれます。
using UnityEngine;using Tsukimi;
public class AttributesFieldChangeCallback : TsukimiBehaviour{ [UdonSynced, FieldChangeCallback(nameof(Value))] private int backing;
public int Value { get { return backing; } set { backing = value; } }
void Start() { Value = 1; Debug.Log(Value); // => 1 }}ネットワーク越しの呼び出しの許可
Section titled “ネットワーク越しの呼び出しの許可”引数つきでネットワーク越しに呼ばれるメソッドには、この属性が必要です。
using UnityEngine;using Tsukimi;using VRC.SDK3.UdonNetworkCalling;
public class AttributesNetworkCallable : TsukimiBehaviour{ [NetworkCallable] public void Receive(int n) { Debug.Log(n); }
void Start() { Debug.Log(1); // => 1 }}自分自身を呼ぶメソッドには、この属性が必要です。
using UnityEngine;using Tsukimi;
public class AttributesRecursiveMethod : TsukimiBehaviour{ [RecursiveMethod] private int CountDown(int n) { return n <= 0 ? 0 : CountDown(n - 1); }
void Start() { Debug.Log(CountDown(3)); // => 0 }}呼び出しの展開
Section titled “呼び出しの展開”この属性を付けたメソッドは、大きさによらず呼び出しの場所へ展開されます。
using UnityEngine;using Tsukimi;
public class AttributesInline : TsukimiBehaviour{ [Inline] private int Twice(int n) { return n * 2; }
void Start() { Debug.Log(Twice(2)); // => 4 }}Inspector
Section titled “Inspector”非公開フィールドの表示
Section titled “非公開フィールドの表示”非公開のフィールドでも、Inspector から値を代入できます。
using UnityEngine;using Tsukimi;
public class AttributesSerializeField : TsukimiBehaviour{ [SerializeField] private int value;
void Start() { Debug.Log(value); // => 0 }}
公開フィールドの非表示
Section titled “公開フィールドの非表示”フィールドは公開のままで、Inspector には出なくなります。
using UnityEngine;using Tsukimi;
public class AttributesHideInInspector : TsukimiBehaviour{ [HideInInspector] public int value;
void Start() { Debug.Log(value); // => 0 }}
見出しと説明
Section titled “見出しと説明”[Header] は見出しを、[Tooltip] はマウスを乗せたときの説明を、Inspector に出します。
using UnityEngine;using Tsukimi;
public class AttributesHeaderAndTooltip : TsukimiBehaviour{ [Header("Group")] [Tooltip("note")] public int value;
void Start() { Debug.Log(value); // => 0 }}
説明はマウスを乗せたときだけ出るので、この画像には写っていません。
値の範囲の指定
Section titled “値の範囲の指定”Inspector ではスライダーになり、指定した範囲の外の値を代入できなくなります。
using UnityEngine;using Tsukimi;
public class AttributesRange : TsukimiBehaviour{ [Range(0f, 1f)] public float value;
void Start() { Debug.Log(value); // => 0 }}
Inspector の幅が狭いと、スライダーは出ずに数値の欄だけになります。範囲の制限は同じように適用されます。
Inspector の項目のあいだに余白を入れます。
using UnityEngine;using Tsukimi;
public class AttributesSpace : TsukimiBehaviour{ [Space] public int value;
void Start() { Debug.Log(value); // => 0 }}
上が余白を空けた側です。空けない側は次のように詰まります。

1 つのフィールドへの複数指定
Section titled “1 つのフィールドへの複数指定”using UnityEngine;using Tsukimi;
public class AttributesMultipleOnOneField : TsukimiBehaviour{ [SerializeField, Range(0f, 1f)] private float value;
void Start() { Debug.Log(value); // => 0 }}非推奨の指定
Section titled “非推奨の指定”この属性を付けたメンバを使うと、警告が出ます。
using UnityEngine;using Tsukimi;
public class AttributesObsolete : TsukimiBehaviour{ [System.Obsolete] public void Old() { }
void Start() { Debug.Log(1); // => 1 }}