※バグ詳細が気になる方向けの情報共有。長いよ😇

【バグ概要】
多人数でプレイした際、死亡後の無敵状態が続いたり、パラシュートが開き続ける

【原因】
空いているプレーヤー登録枠（以下、ロット）を検索し、自身を割り当てる処理が失敗していた。
後から来た人が使用中のロットを空きと誤認し、自身を上書きしていた。
これにより、先に居た人はロットのオーナー権をはく奪され、同期変数（無敵フラグや空中フラグ）のOFFができなかった。

尚、使用中ロットを空きロットと誤認する原因は、まだ同期変数が反映されていないタイミングで検索をしていたため。
ただし、検索開始位置をずらす機構（自身のIDを10で割った余りを使用）があり、インスタンスに入った回数が10回以内であれば、正常に空きロットが割当されていた。

【経緯と詳細】
2024年5月の初期仕様では、空きロットの検索は、プレーヤーがワールドにジョインした際に発生する、OnPlayerJoinedの中で実行していた。このタイミングであれば同期変数も反映が終わっているので問題なかった。

しかし、この仕様では空きロットが少なくなってきた時に、複数人が同時ジョインすると、同じロットの取り合いが発生すると予想され、実際に夏のテストで、これが原因と思われる不具合があった。

ついては、一度取得したロットが本当に取得できているか確認すべく、Updateループ内で定期的に検査する仕組みを導入した。（詳細は12/14の作業ログツイート）

これに合わせて取得するタイミングもUpdate内に移動したが、これが問題となった模様。
バグ対応として、Update内で検索開始する際、OnPlayerJoinイベントが発生済みであることを条件に加えたら不具合が解消した為、そう予想。

【その他】
秋にPlayer保存機能がVRCに実装され、Startイベント時点でPlayerObjectの生成が完了することから、その後のUpdateイベントでは同期変数の反映が完了する仕様になったと思った。実際にテストしたところ、正常に動作したのでOKと思ったけど、これは検索開始位置をずらす機構のせいで、実際にはNGだった模様。
11人以上でテストしていれば気づけたはず。

公開前の最後の週末、多人数で最終テストする予定が私の体調不良で流れ、平日少人数で最終確認し、そのまま公開しちゃった次第。。。
テスト不足を懸念するメンバーの予想通りの結果になってしまった😇