コンテンツにスキップ

behavior とイベント

behavior ブロックは、VRChat から届くイベントやネットワークイベントを処理する部分をまとめるための宣言です。

ユーザー定義型にメソッドを追加する implementation とは役割が異なります。

behavior {
on start {
log("start");
}
}

behavior の中には、次のものを宣言できます。

  • function — behavior 内で使う関数
  • on — VRChat/Udon のイベント処理
  • receive — Custom Network Event の受信処理

on や receive を behavior の外へ直接書くことはできません。

on は VRChat/Udon から届くイベントを処理します。

behavior {
on interact {
log("interact");
}
}

イベントに値が渡される場合は、引数として受け取れます。イベント名や引数は、VRChat/Udon が提供する対応するイベントと一致している必要があります。一致しない場合はコンパイルエラーになります。

イベント処理で状態変数を使わない場合は、state を書く必要はありません。interact も他のイベントと同じ規則です。

状態変数へアクセスするイベント

Section titled “状態変数へアクセスするイベント”

イベント処理から状態変数を読み書きする場合は、引数一覧の先頭に state と書きます。state を省略したイベント処理から状態変数を参照すると、コンパイルエラーになります。

state {
count: i32 = 0;
}
behavior {
on interact(state) {
state.count += 1;
}
}

この state は VRChat から渡される通常の引数ではありません。そのイベント処理が状態変数を利用することを明示するものです。

behavior の中には、イベント処理から使う補助関数も宣言できます。

behavior {
function message() -> string {
"hello"
}
on start {
log(message());
}
}

特定の型に対するメソッドは behavior ではなく implementation に宣言します。

VRChat の Custom Network Event を受け取る処理も behavior の中に宣言します。

behavior {
receive ping {
log("ping");
}
}

詳しくは ネットワーク を参照してください。