見出し画像

VRChatでUDONエアホッケーを作ってみた話 1

1.はじめに

こんにちは。
2021年3月にVRChatのUdon Sharpでエアホッケーワールドを作ってみた所、いろんな人に構造を聞かれたりするので「ざっとまとめて置いたら誰かの役に立つかも」と考えて記事にしておくことにしました。
基本的に時系列で”試したこと”と”作ったもの”を記していくので、技術資料としては偉大なる先人の記録を頼ってください。

作成時の環境
・Unity 2018.4.20f1 (64-bit)
・VRC SDK 2021.03.09.13.57
・Udon 2020.04.30.18.46
・Udon Sharp v0.19.2

作者について
・VRChat歴:4カ月程
・Unity経験:触ったことがある程度

作ったワールドのリンク
UDON AIR HOCKEY

2.VRC物理学への入門

VRCにも慣れてきたのでそろそろワールドでも作ろうかと思い、手始めにUdonを使ってダルマ落としを作ってみました。
(最初はジェ〇ガ的な物を考えたものの、初手としては高難度過ぎると判断)

画像1

詳細は割愛しますが、とりあえず分かったことは以下の通り
・同期自体はとても簡単

画像2

Udon BehaviourのSynchronize Positionを有効にしておけば勝手に位置合わせをしてくれます。しかし、これは所有権を持ったplayer(owner)の世界の同一オブジェクトの位置に移動する処理が繰り返されているようで、非同期の障害物があったりすると上手くいかないようです。
座標だけ合わせるとショートワープの連打になっちゃうからしょうがないね。
下は微妙な位置で引っ掛かって初期状態に戻れない図。

画像3

・基本的にP2Pで同期を取る
オブジェクト毎にownerが居て、ownerの情報を全プレイヤーにばら撒く形で同期を取っている模様。
このため最終的に同期は取れるが、全員が同じ動きを見れるかというと結構怪しい。
・Position以外は同期されない
移動しているオブジェクトのownerを強引に切り替えたりするとピタっと静止します。

と、いうわけで。
ここまでわかったことを踏まえて次のテーマを決めよう。(この時点で特にゲーム化して公開すること等は考えていない)
出来るだけシンプルな物理演算と同期処理のテストができるものが良いな…。という事で、縦軸移動が無く、1対1で、共有するオブジェクトが一つ(パック)しかなく、衝突と反射だけで動作が再現可能というシンプルさからエアホッケーを作ってみることにしたのでした。

というわけでエアホッケーを作ることに決めた所で次回に続きます。

いいなと思ったら応援しよう!