世代別交流用ワールドに入室者数カウンターを設置する

前回の記事で同期変数の実装方法がだいたい理解できて来たので、同じくVRChatにアップロードしていた世代別交流を目的としたワールド「世代別だんらんステーション」に入室者数を確認することのできるカウンターを設置しました。

このワールドには世代別の部屋と大きなホールを設置していますが、ワールドに入ってから、ワールド内にユーザがいることは分かっても、どの部屋に人がいるのか知ることができず、部屋まで行ってみる必要があったため、改善したいなと考えていたポイントでした。
(結構広いので、この中をどこに人がいるのか分からないまま行き来するのはなかなか煩わしいですよね、)

世代別の部屋とホール

ということで、スポーンの位置を少し変更してカウンターを表示するためのパネルを設置。
それから各世代別の部屋とホールにボックスコライダーを追加しました。

入室者数カウンター
コライダー追加

あとはUdonSharpを使ってカタカタとコーディング。
今回は前回の巨大迷路とは違って入室者のPlayer IDをシンプルに一元管理したいというのもあって、排他的に制御できるように同期変数の更新は各プレイヤーにオブジェクトオーナーを割り当てて更新させるのではなく、すべてオブジェクトオーナーが更新する方式にしました。
(同期変数は更新反映にラグがあるらしいので、注意しなきゃいけないポイントですね)

大まかなシーケンスとしては以下の様な感じ、入室も退室も基本的にすることは大きく変わらず、今回はだいぶシンプルなコードで実現できました。

入室シーケンス
退室シーケンス

ポイントとしては、
①入室、退出のイベント検出
 入室:OnPlayerTriggerEnter
 退室:OnPlayerTriggerExit
 ワールド退出:OnPlayerLeft
②オブジェクトオーナーが同期変数を更新および同期実行
 同期変数:OnValueChangedのManual同期
 同期実行:RequestSerialization
③カウンターへの反映
 オブジェクトオーナー:ローカル反映
 その他のプレイヤー:OnDeserialization呼び出し時に反映
という感じかな。

ということで、無事に実装アップロードを終えて、カウンター表示できるようになりました!

カウンター動作確認

ただこのワールド、アップロードしたもののVRChatにはCommunity Labsという審査を通すというステップが存在し、まだまだ通過できておらず、これがなかなかのハードルのようです。
ちゃんと公開したワールドを楽しんで貰えるようにするためには、そもそもコンテンツとして求められているワールドなのかというのもありますが、たくさんの人に訪れてもらえるようにコミュニケーションを密に行うこととブランディングを行うことが肝になるのかなと、こちらはまた大きな課題ですね。

もし興味を持っていただけたらぜひぜひ遊びに来てください!
ワールド:Generational Exchange Stations ⁄ 世代別だんらんステーション