コンテンツにスキップ

属性

書き方説明
[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]非推奨の指定
書き方説明エラー理由代わりに
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
}
}

UdonSyncMode で補間の種類を指定します。指定できる種類は型によって違います。

using UnityEngine;
using Tsukimi;
public class AttributesSyncedInterpolated : TsukimiBehaviour
{
[UdonSynced(UdonSyncMode.Linear)] private float value;
void Start()
{
Debug.Log(value); // => 0
}
}

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
}
}

この属性を付けたメソッドは、大きさによらず呼び出しの場所へ展開されます。

using UnityEngine;
using Tsukimi;
public class AttributesInline : TsukimiBehaviour
{
[Inline]
private int Twice(int n) { return n * 2; }
void Start()
{
Debug.Log(Twice(2)); // => 4
}
}

非公開のフィールドでも、編集画面から値を入れられます。

using UnityEngine;
using Tsukimi;
public class AttributesSerializeField : TsukimiBehaviour
{
[SerializeField] private int value;
void Start()
{
Debug.Log(value); // => 0
}
}

フィールドは公開のままで、編集画面には出なくなります。

using UnityEngine;
using Tsukimi;
public class AttributesHideInInspector : TsukimiBehaviour
{
[HideInInspector] public int value;
void Start()
{
Debug.Log(value); // => 0
}
}

[Header] は見出しを、[Tooltip] はマウスを乗せたときの説明を、編集画面に出します。

using UnityEngine;
using Tsukimi;
public class AttributesHeaderAndTooltip : TsukimiBehaviour
{
[Header("Group")]
[Tooltip("note")]
public int value;
void Start()
{
Debug.Log(value); // => 0
}
}

編集画面ではスライダーになり、指定した範囲の外の値を入れられなくなります。

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
}
}
using UnityEngine;
using Tsukimi;
public class AttributesMultipleOnOneField : TsukimiBehaviour
{
[SerializeField, Range(0f, 1f)] private float value;
void Start()
{
Debug.Log(value); // => 0
}
}

この属性を付けたメンバを使うと、警告が出ます。

using UnityEngine;
using Tsukimi;
public class AttributesObsolete : TsukimiBehaviour
{
[System.Obsolete]
public void Old() { }
void Start()
{
Debug.Log(1); // => 1
}
}