前回の記事で同期変数の実装方法がだいたい理解できて来たので、同じくVRChatにアップロードしていた世代別交流を目的としたワールド「世代別だんらんステーション」に入室者数を確認することのできるカウンターを設置しました。
このワールドには世代別の部屋と大きなホールを設置していますが、ワールドに入ってから、ワールド内にユーザがいることは分かっても、どの部屋に人がいるのか知ることができず、部屋まで行ってみる必要があったため、改善したいなと考えていたポイントでした。
(結構広いので、この中をどこに人がいるのか分からないまま行き来するのはなかなか煩わしいですよね、)
ということで、スポーンの位置を少し変更してカウンターを表示するためのパネルを設置。
それから各世代別の部屋とホールにボックスコライダーを追加しました。
あとはUdonSharpを使ってカタカタとコーディング。
今回は前回の巨大迷路とは違って入室者のPlayer IDをシンプルに一元管理したいというのもあって、排他的に制御できるように同期変数の更新は各プレイヤーにオブジェクトオーナーを割り当てて更新させるのではなく、すべてオブジェクトオーナーが更新する方式にしました。
(同期変数は更新反映にラグがあるらしいので、注意しなきゃいけないポイントですね)
大まかなシーケンスとしては以下の様な感じ、入室も退室も基本的にすることは大きく変わらず、今回はだいぶシンプルなコードで実現できました。
ポイントとしては、
①入室、退出のイベント検出
入室:OnPlayerTriggerEnter
退室:OnPlayerTriggerExit
ワールド退出:OnPlayerLeft
②オブジェクトオーナーが同期変数を更新および同期実行
同期変数:OnValueChangedのManual同期
同期実行:RequestSerialization
③カウンターへの反映
オブジェクトオーナー:ローカル反映
その他のプレイヤー:OnDeserialization呼び出し時に反映
という感じかな。
ということで、無事に実装アップロードを終えて、カウンター表示できるようになりました!
ただこのワールド、アップロードしたもののVRChatにはCommunity Labsという審査を通すというステップが存在し、まだまだ通過できておらず、これがなかなかのハードルのようです。
ちゃんと公開したワールドを楽しんで貰えるようにするためには、そもそもコンテンツとして求められているワールドなのかというのもありますが、たくさんの人に訪れてもらえるようにコミュニケーションを密に行うこととブランディングを行うことが肝になるのかなと、こちらはまた大きな課題ですね。
もし興味を持っていただけたらぜひぜひ遊びに来てください!
ワールド:Generational Exchange Stations ⁄ 世代別だんらんステーション