![見出し画像](https://assets.st-note.com/production/uploads/images/48702140/rectangle_large_type_2_ee3da37b24b90b4c01e617add5d2321e.png?width=1200)
VRChatでUDONエアホッケーを作ってみた話 4
前回の続きです。承前。
自力で同期を取ることにし、Puckが自陣にある時に基準世界になるようにしました。はっきり言って言葉では訳が分からないと思うので、今回は流れを図付きで詳細に書いてみます。
ゲームの全体的な流れ
1. Malletピックアップと同時にGoalとOwner権切り替え用のGate(点線部分)のOwner権を取得。
2. Player1(赤)がPuckを打つ
3. 先行する赤(基準世界)側のPuckが青Gateの接触して停止(同時に渦巻演出)
この時点で追従する青世界側のPuckはGateまで到達していない
4. 青世界のPuckが青Gateに接触し、Player2(青)がPuckのOwner権を取得
同時に赤世界側に同期信号を発信。ここから青側が基準世界となる。
5. Player2(青)側が先行する形で移動再開
6. 青(基準世界)側でPuckがGoalに接触するとplayer1(赤)の得点となる
(赤世界側の青ゴールは接触しても何も起こらない)
という感じで中央のGateを通過する際に、Puckの待ち合わせとOwner権の移譲を行って自陣では自分優先という状況を作っています。
この待ち合わせは攻撃側にしか発生しませんが、「先行するPuckが後続Puckを待つ」「Owner移譲後に送信される同期信号を待つ」という二つの待ち合わせがあるためPlayer間の遅延の2倍の停止時間になります。
で、出来上がったものがこちら。
まだリスポーン時にロストしたりするけど、まぁ9割位完成と言って良いかな。
— らーたん (@rar_men) March 9, 2021
速球を打つと同期待ち中にゴールしたりするので、攻撃はサッパリわからないが、失点は結構はっきり認識できる。
観戦者視点は遅ければ無想転生、早けりゃ天下一武道会です。これが限界。 pic.twitter.com/0CvjwrCj0l
なお、ゲームのコード自体はOwner権が世界線を司るPuckにほぼ集約されています。各種当たり判定に接触した時に接触した相手によって挙動を変えている形です。
ゲーム管理等の細かい点は置いといて、ここまででUDONエアホッケーの仕組みに関する話は大体し終わったので本編はここまでとなります。
次回、おまけとして残りの細かな課題についていくつか書きたいと思います。
それでは、また次回に続きます。