VRChat UdonのEventsをいじって試行錯誤してみた備忘録~InteractやOnPickupなど~

VRChat

バーチャル3Dクリエイター神部まゆみです(*^-^*)

この記事はVRChat Udonをいじってみたからそれについての記事です。

Event系の命令を試行錯誤していじってみました。

 

前回の記事はこちら。

VRChat Udonワールドの作り方を公式動画で学ぶ③ ~Haptic Eventで振動追加、ドアをアニメーションで動かす~
VRChat Udonワールドの作り方を公式動画で学びました。Haptic Eventで振動追加、ドアをアニメーションで動かしました。
■PR■

現在Meta Quest2 128GBが13%割引で買えるうえ、なんと「Space Pirate Trainer DX」と「GOLF+」がタダで貰えるようです(2023/04/02 23:59まで)。

ザッカーバーグ氏太っ腹すぎる…Σ(゚Д゚)

Meta Quest 2—完全ワイヤレスのVRヘッドセット【2023/06/03まで「Space Pirate Trainer DX」「GOLF+」無料ダウンロード付】—128GB|Amazon

この機会にメタバースデビューしておくのも良いかも。

参考にした先輩のページ

とても参考になりました。

ありがとうございます(*^-^*)

U# 入門 おまけ - ハツェの真時代傾向璋
こんばんは。ハツェです。 今回も、Udonをスクリプトで制作するための記事を書いていきます。 前回はuGUIでUdonを扱う方法について紹介しました。 今回はもう前提知識として伝えることは伝えたので、おまけ回です。 動作環境は、Unity : 2019.4.29f1、VRCSDK : 2021.08.11.15.16、...
Events
An experimental compiler for compiling C# to Udon assembly - MerlinVR/UdonSharp

OnplayerTriggerEnter 床に乗ると非表示にする

SetActiveでオンオフしたら簡単にできた。

 

青い床に乗ると消える。

 

InputJump ジャンプボタンを押すと非表示にする

 

Jumpボタンはデフォルトだとスペースキーになってます。

 

これでスペースキーを押したら消えた!

…しかし一方通行なのでこれだと非表示から表示に切り替えることができない…。

Get activeselfを噛ませてBranchで分岐させたら、スペースキーを押している時だけ消えた

消すオブジェクトのアクティブ状態をGetactiveSelfで取得して、Branchで分岐させてみたらスペースを押している時だけ消えるようになった。

一応キー入力は検知しているわけだし、これはこれで使い道がありそうかな?

インスタンスを繋いでなかっただけだった(~_~;)これ忘れがちなので注意!

VRCChair32からSetActiveのinstanceに繋がないとダメ。↓は接続し忘れていた。

正しくはこう↓

 

InputUse Useボタンを押すと非表示にする

 

InputUseに変えただけです。

VRコントローラーの人差し指のトリガーの部分みたいです。

 

InputGrab Grabボタンを押すと非表示にする

これもEventsをInputGrabに変えただけ。

VRコントローラーの握る部分のボタンです。

 

InputDrop これは何かとセット?

これなんだろう。

一応組んでみたけどDropボタンってのが分からなかった。不明。

↓のOnPickUpとOnDropはセットで使えるっぽいから、何か他のやつとセットなのかもしれない。

OnPickUp 持ったら表示非表示

一回持ったら非表示、もう一回持ったら表示…のループ。

 

離したら非表示…とかにしたいけどできるのかな?

ん、これもしかしてOnDropってこれとセットなのかな?

OnDropと組み合わせたらいけた!これはセットで使うと良いっぽい

これで持ったら非表示、離したら表示、って感じにできた。

 

Interact オブジェクトに触れてトリガー引いたら表示非表示

これでいけた!

キューブをクリックすると表示非表示を切り替えられます。

これはドアの開閉とかのギミックによく使われてるやつかな?

とりあえずこれ覚えとくだけでも基本的なギミックは作れる気がする。

Interactでアニメーションを切り替える

前回の記事でもアニメーション切り替えは書いた。

VRChat Udonワールドの作り方を公式動画で学ぶ③ ~Haptic Eventで振動追加、ドアをアニメーションで動かす~
VRChat Udonワールドの作り方を公式動画で学びました。Haptic Eventで振動追加、ドアをアニメーションで動かしました。

アニメーションを二つ作って遷移で双方向に繋ぎ、bool変数を作って遷移条件を設定しておく。

 

これでタッチしたらアニメーション変更できた!

OnPlayerRespawn リスポーンしたら非表示にする

 

 

最初は表示されてるけど、穴に落ちてリスポーンしたら消えた!

 

OnPlayerParticleCollision パーティクルに触れたら非表示

パーティクルはアセットストアで無料配布されてるやつを使います。

Unity Particle Pack|unity asset store

しかしできなかった…。コリジョンの設定が必要な気がする。

 

こちらの先輩によると、パーティクルシステムにコリジョンの設定をすればいいらしい。

ありがとうございます(*^-^*)

パーティクルの接触判定を作成する
プレイヤーがパーティクルに接触するとプレイヤー名を表示するサンプルの解説 Udonスクリプト作成 サンプルのS…

日本語化してあるから一瞬戸惑ったけど多分これでいいっぽい。

 

これでいけた!

ノードはこんな感じ。

 

これまではchairにudon behaviorをつけてたけど、今回はparticleにudon behaviorをつけないと動作しなかった。

あと↓でやったらパーティクル自体が消えてしまった。

※setactiveにインスタンスが指定されてなかったからのようです(~_~;)指定しないとselfが指定されるので自壊する

 

正しくはこう。

これでパーティクルに当たった時にオフだったらオン、オンだったらオフにできた。

インスタンスを指定し忘れるのはついやっちゃうな(~_~;)

忘れないようにしないと。

OnPlayerCollisionEnter コライダーに触れたら非表示

こんな感じにしてみたけど、これは静止してるオブジェクトだと動かないっぽい。

じゃあ思いっきり動かしてみるか…w

んーダメだな…なんでだろう。

Rigidbodyを追加するといいらしい

検索したらこちらの先輩が同じようなことをやっていて参考になった。

ありがとうございます(*^-^*)

壁や床の接触判定を作成する
プレイヤーが青い領域に侵入すると正面からCubeが飛んできて、プレイヤーに接触するとCubeが停止してコントロ…

 

とりあえずRigidbodyだけ追加してみたらいけた。

一瞬消えたのがお分かりいただけただろうか。

最初にぶつかった時も消えたけど、録画のFPSが低くて撮り逃したw

……でもアニメーションで動いてるオブジェクトに接触すればいいならOnPlayerTriggerでいいか…。

おわりに

単純なギミックだけならこれだけで結構いけそう。

細かい条件はudon#とかいうやつで書いた方がいいのかな?そっちも見てみるか…。

まぁゲーム作りたいとかじゃなければ基本的な命令の組み合わせでもだいぶいけるかもしれない。

 

もう少しいじってみます(*^-^*)

タイトルとURLをコピーしました