Contents — 6 sections
RicochetTanksのSeat操作をClientSimで試していたとき、妙な挙動が出た。
座席へ乗る。
移動入力を入れる。
降りる。
ゲームとしては、移動したいだけ。
ClientSim上では、Seatの自動退出が有効な状態で移動入力を渡すと降車した。
最初はGame LogicのBugに見える
自動Testで、
「Wを押したらSeatから降りた」
と出たら、普通は移動処理を疑う。
でもVRChat系の試験では、
- Unity側
- ClientSim
- Udon
- 実VRChat Client
のどこで起きているかを分けないといけない。
今回の挙動を最初に観測したのはClientSim上だった。
ただし、VRCStationには通常の移動・ジャンプによる退出経路があり、Disable Station Exit を有効にするとそれを防げる。
したがって、この時点で「ClientSim固有のBug」とは扱わなかった。
自動退出を止めた
対応では、Seat側の自動退出へ依存するのをやめた。
代わりに、
InputJumpから明示的に降車する
ようにした。
これなら、
- 移動入力
- 旋回入力
- 降車入力
を分けられる。
「動こうとしたら降りた」を防げる。
Simulatorに合わせすぎても危ない
ここで注意したのは、
ClientSimで動いたから本番でも正しい、
とも、
ClientSimで変だったから本番も壊れている、
とも決めないこと。
Simulatorは便利だけど、本番Clientそのものではない。
だから修正後も、
- ClientSim
- 実VRChat
- 人間の実キーボード操作
を別のEvidenceとして残した。
後で人間がSpace降車を確認した
実VRChatでは、AIエージェントのSpace注入では降車を確認できなかった。
これは FAIL ではなく NOT_CONFIRMED とした。
その後、オーナー本人が物理キーボードでSpaceを押し、降車はPASS。
つまり、
ClientSimでの観測。
Automation入力の問題。
実ゲーム側の挙動。
この3つは同じではなかった。
Test環境と本番仕様を切り分ける
Simulatorを入れるとTest回数は増やせる。
ただし、そこで見えた挙動がSimulator固有なのか、本番仕様を再現しているのかは別途確認が必要になる。
そのため、
- 何を再現しているか
- 何を再現していないか
- 本番との差
- Simulator固有の入力処理
- VRChat側の仕様
を分けて見る必要がある。
いまの結論
ClientSimで移動入力を入れたらSeatから降りた。
VRChatのStation仕様上も通常の退出経路と整合するため、Simulator固有の不具合とは扱わなかった。
対応として明示降車へ変えた。
でも一番重要だったのは、
Simulator上の挙動だけで、本番の不具合ともSimulator固有の不具合とも決めなかったこと。
Test Harnessにも仕様がある。
本番側にも仕様がある。
そこを分けると、VRChat開発のデバッグがかなり楽になる。
Signal / 観測記録
この記録への観測を送る
反証、