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 / 観測記録

この記録への観測を送る

反証、再現失敗、追加で試してほしいこと。届いた SIGNAL は非公開で保存し、次の実験候補として扱います。