属性
書ける形(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] | 非推奨の指定 |
書けない形(2)
Section titled “書けない形(2)”| 書き方 | 説明 | エラー | 理由 | 代わりに |
|---|---|---|---|---|
private int Down(int n) { return Down(n - 1); } | 属性を付けずに自分自身を呼ぶ | TUKI0001 | 環境 | [RecursiveMethod] を付ける(ループか、自分で持つスタックで書いてもよい) |
SendCustomNetworkEvent(…, nameof(Take), 1)([NetworkCallable] 無し) | 属性を付けずに、引数つきのメソッドをネットワーク越しに名前で呼ぶ | TUKI0001 | 環境 | 受け側に [NetworkCallable] を付ける |
引数つきのメソッドは、属性が無いと引数の型を含む名前で登録されます。nameof で書いた名前と食い違うので、名前では引けません。[NetworkCallable] を付けると、書いた名前のまま登録されます。 |
同期の属性は、この言語の名前空間から書けます。移行元の名前空間を同時に using すると、同じ名前の属性が 2 つ見える状態になり、コンパイルが止まります。片方の using を外すと通ります(プログラムの形)。
[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 }}非公開フィールドの表示
Section titled “非公開フィールドの表示”非公開のフィールドでも、編集画面から値を入れられます。
using UnityEngine;using Tsukimi;
public class AttributesSerializeField : TsukimiBehaviour{ [SerializeField] private int value;
void Start() { Debug.Log(value); // => 0 }}公開フィールドの非表示
Section titled “公開フィールドの非表示”フィールドは公開のままで、編集画面には出なくなります。
using UnityEngine;using Tsukimi;
public class AttributesHideInInspector : TsukimiBehaviour{ [HideInInspector] public int value;
void Start() { Debug.Log(value); // => 0 }}見出しと説明
Section titled “見出しと説明”[Header] は見出しを、[Tooltip] はマウスを乗せたときの説明を、編集画面に出します。
using UnityEngine;using Tsukimi;
public class AttributesHeaderAndTooltip : TsukimiBehaviour{ [Header("Group")] [Tooltip("note")] public int value;
void Start() { Debug.Log(value); // => 0 }}値の範囲の指定
Section titled “値の範囲の指定”編集画面ではスライダーになり、指定した範囲の外の値を入れられなくなります。
using UnityEngine;using Tsukimi;
public class AttributesRange : TsukimiBehaviour{ [Range(0f, 1f)] public float value;
void Start() { Debug.Log(value); // => 0 }}編集画面の項目のあいだに余白を入れます。
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 }}