バーチャル3Dクリエイター神部まゆみです(*^-^*)
この記事はVRChat Udonワールドの作り方を公式動画で学んでみたので、それについての記事です。
前回の記事はこちら。
動作確認した最新バージョンは Unity 2022.3.22、VRChat SDK 3.8.2 です。
動画を見ながら学んでみる
とても参考になりました。
ありがとうございます(*^-^*)
~3:00 ゲートを作る
門とドアを設置し、プレイヤー検知用の床をドア前後に配置していた。
検知用の床にプレイヤーが乗ったら(触れたら?)ドアが開くしくみらしい。
動画ではVRChatサンプルに入っていたイスを二つくっつけて門を作っていたw
見よう見まねで作ってみたけどこんな感じ。



Packages/com.vrchat.worlds/Samples/UdonExampleScene/SampleAssetsSet/Prefabs にたくさんプレハブがあるので好きなやつを使うといいかも。



3:00~4:00 コライダーをトリガーにしてUdonグラフ作成
検知用の床にボックスコライダーを追加、「トリガーにする(Is trigger)」にチェックを入れるとイベントのトリガーにできるらしい。
トリガーにするとぶつからずすり抜けられるみたいです。



その後udon behaviorを追加、udon program assetを選んでNew Programを押すとudonグラフが作れます。



4:00~8:00 ノードを組んで動作確認する
Udonノードグラフをいじってプログラミングしていく。



一言で説明すると、
OnPlayerTriggerEnterが有効になったら(トリガーにしたコライダーに触れたら)、door_1のトランスフォームにSet positionの値を代入する。
トリガーが無効になったら(OnPlayerTriggerExit)、door_1のdoor_1のトランスフォームにSet position(画像下のほう)の値を代入する。
って感じ?一言では言えてないが(;^_^A
動画だとSetLocalPositionでやってたけど、まぁ動いたからいいかな。
これEventはifやcase文の条件だと考えるとわかりやすいのかな?
OnPlayerTriggerEnterが有効になったらSetPositionスクリプト?を呼び出す…みたいな。
開けた状態と閉じた状態のトランスフォーム位置を代入する
exitのほうは、ドアが閉まった状態の位置のトランスフォームの値をset positionに書き、



Enterのほうは開けた状態のトランスフォームをset positionに書く。



無事に動いた!
これで最低限の動作はするようになりました!ヤッタネ(^^)v



SetRotationもやってみた
SetPositionが使えるならSetRotationも…と思ったけど、なんか型がQuartenionとかいうやつらしくて動かなかった。
xyzwとかいう4軸らしくて私には意味不明(~_~;)
xyzのオイラー角っていうのに変換しないといけないみたい。
でもquartenion.eulerとかいう関数をかませれば、馴染み深いxyzのオイラー角に変換できるっぽい。
こんな感じにしたら動きました。



これで青い床に乗ると90度回って通れるようになった!



まぁめんどくさいからアニメーションクリップで動かしたほうがいいかな(;^_^A
でも試行錯誤したらちょっと勝手がわかってきた気がする。
だいたい普通のunityスクリプトと同じ感じっぽい。
SetLocalscaleもやってみた
最初なぜか動かなかったけどunity再起動したら動いた。
キャッシュか何かが残ってるとか?まぁ動いたからいいか。



これで近づくとでかくなる動作ができた!



Udonって言っても結局unityでスクリプト組んで動かすのと同じ感じみたい。
これなら割と簡単にギミックとかも作れそうな気がする。
つづく
一気にやってしまおうかと思ったけど、考えながらやらないと応用が利かなそうだからぼちぼちやっていく。
あとはhaptic eventとかいうやつで振動をフィードバックしたり、アニメーションクリップで開閉したりするところをやります。
アニメーションで開閉できるようになれば、今作ってるワールドに組み込んで動くようにしようかな。
まぁぼちぼちいじっていきます(*^-^*)



