Open6

VRChatのUdonに関する情報を適当に書く

さやまめさやまめ

ちゃんと記事にしようと思うと時間が掛かっちゃったりするので、とりあえず私がゆるく投稿できる場所を用意。
いずれ記事になる情報もあるかも。

さやまめさやまめ

Udon Graphのフローバグ(仮称)などについて

先日私が気付いたバグです(他に気付いている人も居るとは思いますが)
名前は無いのでとりあえずフローバグと呼んでます。
https://twitter.com/Sayabeans_0011/status/1490329562517053443
https://twitter.com/Sayabeans_0011/status/1490347485881008129

1つ目について

BranchやWhile等のフローが分岐するノードについて、フローのそれぞれにあるノードの引数として、何らかのノード(変数・定数除く)の戻り値を使用すると、初めのフローの方にしかメソッド呼び出し処理が記述されないため、分岐ノードの条件によっては意図しない戻り値が得られる。(Nullとか、前回の値とか)

2つ目について

複数のノードの引数に、何らかのノード(変数・定数除く)の戻り値を使用すると、内部的に(一時)変数の使い回しが発生する。
使い回しの際は初めに処理されるノードの(一時)変数が利用されるため、それが変数のSetノードなどであった場合、使い回される一時変数が変数そのものとなってしまい、意図しない動作をする可能性がある。
ツイートではBranchを使用しているが、これはフローを分岐させなくても、何らかのノードの戻り値を複数のノードの引数に繋ぐことで発生する。

両方とも、UdonGraphコンパイラの"使い回し"処理によって引き起こされる問題と考えられる。

さやまめさやまめ

ObjectSync使用時のuseGravity、及びisKinematicについて

ObjectSyncを使っている場合、RigidBodyのSet useGravitySet isKinematicは機能しない。
代わりにObjectSyncのSetGravitySetKinematicを用いる…のだが、SetGravityについて、重力を有効化すること(Trueで実行)は出来るが、重力を無効化すること(Falseで実行)は出来なかった。
未報告のバグ…?

代替案として、重力が有効な状態でSetKinematicを使うことにより、擬似的に重力の有効/無効切り替えを実現出来る…が、Kinematicが有効だとマズい場合、解決策が思い当たらない。

さやまめさやまめ

未確認のまま放置してたので、とりあえず"直った可能性"を言及したソースを載せる。
VRChat 2022.2.1の更新でFixed SyncPhysics issues with syncing Gravity / Kinematic and coming out of sleepとある。