Udonメモ
Udonメモ
操作
スペースキーでノードのクイックサーチ、Tabキーでフルサーチ 基本的にクイックサーチでOK
選択ノードをCtrl+Dで複製
右クリックメニューでコメント入れられるけど日本語入力するときはコピペじゃないと入らない
自分がよく使うノード
雑な認識で解説
Variables(変数)関連
変数。通常グラフの左上にあるVariablesウインドウにて追加を行う。 int. float. bool, stringなどの型だけでなく、GameObjectやAudioSource、Animatorなどの各種コンポーネントも指定できる。
変数の左の’>’をクリックするとpublicとsyncdの設定が可能。 publicにチェックを入れると変数を外部から設定できるようになり、syncdにチェックを入れると他プレイヤーと変数を同期するようになるらしい。(同期周りは闇が深そうなので手を出していない。)
publicにチェックを入れた変数はUdon Behaviourから変数を指定できるようになるので 汎用的に複数個所で使いまわすタイプのグラフを作るときはpublicのチェックを入れておくと便利
Get variable/Set variable
Variablesウインドウから変数をD&Dすると変数の値を他のノードに与えるためのノードであるGet variableを設置できる(画像左)。設置時に左Ctrlを押すと逆に他のノードから変数に値を代入するノードであるSet variableを設置できる(画像右)。現状2020.08.07.18.18_PublicではGet variableを直接Get variableに繋ぐと正常に代入できないバグが存在していると思われる(1敗)。
Get Program Variable/Set Program Variable
Udon Behaviorカテゴリに存在するノード
他のUdonの変数を持ってきたり他のUdonに変数を代入できる。 対象の変数にはpublicにチェックが入っている必要がある。 instanceに対象のUdon Behaviorを繋ぎ、Symbolnameに使用する変数名を入力する。
Events関連
フローの起点となるノード
VRCSDK2におけるVRC Triggerを置き換える存在
基本的にEventsカテゴリに入っている。
1つのUdonグラフに複数のEventを入れることも可能。 実行順には気をつけること。
Start
ワールドの初回ロード後に実行される。
これ2人目以降のJoinってその人に対してStart実行されるのかってところがいまいちわかってないので要検証
>実行されるっぽい。
Update
毎フレーム実行される。 リアルタイムで実行する必要がある系のスクリプトで使う。
処理落ちでFPSが落ちるとその分時間当たりの実行回数も減る。
LateUpdate
毎フレーム実行される。 Updateとの違いは実行がUpdateよりも後になる点
Updateで行った計算結果をLateUpdateで処理したりとかするのに便利そう。
FixedUpdate
一定時間ごとに実行。デフォルトでは0.02秒ごと 実行間隔はUnityの Edit→Project Settings→Time に設定あり 物理演算の判定とかにも関わってる?ようなのでデフォ値から動かす時は要注意っぽい。
リアルタイム性は欲しいけど毎フレーム実行は不要なときはこっち使えばいいのかな。
処理落ちでFPSが落ちてても実行間隔を維持しようとするっぽい。
Interact
インタラクト時(手を近づけて実行するボタン系のやつ)に実行。
SDK2のVRC TriggerのOnInteractに相当
Interact時にテキストをデフォルトのUseから変えたい時や有効範囲(Proximity)を変えたい時は、Inspectorの表示をDebugに変更するとUdon Behaviour上で変更ができるようになる。
On~系
SDK2のVRC TriggerのOn~に相当
Event Custom
なぜかこいつだけEventsじゃなくてSpecialのカテゴリに入ってる。わかりづらい。 SDK2のVRC TriggerのCustomに相当
テキストボックスにイベント名を入れておき、別コンポーネントから実行できる。
こいつに限らずサーチ欄のノード名と実際のノード名が微妙に違うのが多いのでちょっと困る。
フロー制御
フロー制御系のノードはすべてSpecialカテゴリに入っている
Block
フローを分割する。右側に分割したフローは上から順に処理されてるらしい。
Branch
if文に相当するやつ。bool値を持ったノードを繋いで結果から流れるフローを分ける。 というか名称ifで良かっただろこれ。
For
For文に相当するやつ。start値からend値になるまでbodyに繋いだフローを繰り返し、終わったらExitに繋いだフローに流れる。
While
while文に相当するやつ。繋いだboolがTrueの間はBodyに繋いだフローを繰り返し実行する。 FalseになったらExitに繋いだフローに流れる。
演算関連
+とか/とか*とかで検索できないのでわかりづらい。
Udonのバージョンによってmodulo(剰余演算)ノードがあったりなかったりするらしい。 現状2020.08.07.18.18_Publicには入ってないので奇数・偶数判定がちょっとめんどい
Const~系
定数。計算関連はSystemカテゴリに入っている。 特定のコンポーネントの専用定数みたいなやつはUnityEngineカテゴリに入っているけどそっちはよくわからない。
Addition
加算 +
Subtraction
減算 - 上の数値から下を引く
Multiplication
乗算 *
Division
除算 / 上の数字÷下の数字
Equality
2つの値が同じだったらtrue、違えばFalse ==
Equalsというノードもあってなんか厳密には違うっぽいんだけど違いが良く分かってない。
Inequality
2つの値が別だったらtrue、同じだったらFalse !=
Greaterthan~ / Lessthan~
大なりとか小なりとか。上than下で判定 ><≧≦
UnaryNegation
booleanのTrueとFalseを反転させるノード。
ミラーのトグルスイッチとか作るときに超便利。
DateTime
Systemカテゴリに入っている。
個人的にSDK3になってうれしいポイントの代表格。PCのシステム時間が取得できる。 SDK2時代に同じことをする場合VRC_panoramaで専用の外部サーバーから日時が色情報に変換された画像を取得してそれをシェーダーでデコードするようなかなり面倒な方法を使って実装していることが多かったようだ。
get Now / get UtcNow
現在のPCのシステム時間を取得する。 get UtcNowの方は協定世界時で取得してくれます。
その他のget~系
DateTime型から年とか分とか秒とかの要素を切り出してint値で取得するノード
基本的には上記get Now/get UtcNowで取得した日時を利用して時計とかカレンダーとかを作るときに使う人が多いと思う。
GameObject
UnityEngineカテゴリに入っている。On/Offスイッチ周りしか触ってない。
get activSelf
instanceに繋いだGameObjectが有効ならTrueを、無効ならFalseを返す。
SetActive
instanceに繋いだGameObjectの有効、無効をvalueにセットした値に変更する。 get activSelf→UnaryNegation→SetActiveと繋ぐだけでお手軽トグルスイッチの完成
Transform
UnityEngineカテゴリに入っている。 オブジェクトの移動とか回転とか関連のノード 自分はRotateしか触ってない。
Rotate
オブジェクトを回転させるのに使う。 真面目にチュートリアルをやった人なら使ったはずなので多分解説不要。 instanceにTransform型を繋ぎ、axisで回転させたい軸を指定。angleで角度を指定する。 あくまで現在の角度に+何度するかって型式なので、特定の角度に回したいならset LocalRotationってノードがあるのでそっち使うみたいなんだけどQuaternionが良く分からなかったので触ってない。
その他
飽きたので気が向いたら追記
サンプル
有用なサンプルがAsset/VRChat Examples以下に沢山入っているのでそれを見ろ。
以下は自分がつくった謎サンプル
1秒カウンター
1秒ごとにデバッグログを出力。ついでに毎分0秒でデバッグログを出力、時計作るときのテストで作った。
BGM音量スライダー
UI部品のスライダーでAudio Souceの音量を制御。時計のチャイム音量の制御用に作ったけどBGMとかにも使える。
スライダー側の設定