VRC Rogue 2026/05/07

概要
非オーナー側同期バグ修正、仕様書整備(Docs/新設)、ハイライトバグ修正、入力方式をOnPointerClickに切り替え、オートムーブ1マスごと同期を実装。シーン構築ツール(RogueSceneSetup)をOnPointerClick方式に対応更新、INPUT_DESIGN.md を最新化。
変更点
同期
-
_AcquireOwnership()に DungeonGenerator のオーナーシップ取得を追加GameManagerのgameObjectだけでなくdungeonGenerator.gameObjectもNetworking.SetOwnerするよう修正StartGame()/ReturnToStart()/RegenerateMap()/OnRestart()など_AcquireOwnership()を呼ぶ全箇所に一括で適用される
-
オートムーブを1マスごとに同期
_AutoMoveStep()の途中マス移動後にも_ScheduleSync()を追加。これまでは最終マス到達時とモンスター遭遇時のみ同期していたため、他プレイヤーにプレイヤーがジャンプして見えていたautoMoveIntervalを 0.3f → 0.5f に引き上げ。BatchedSync の SyncDelay(0.3f) より長くすることで各マスの同期が確実に送信される
ドキュメント
- Docs/ フォルダ新設・仕様書5本作成
GAME_DESIGN.md(ゲームルール・バランス・操作)、TECH_DESIGN.md(U#版アーキテクチャ・同期設計)、INPUT_DESIGN.md(入力方式の設計・知見)、RENDER_SPEC.md(描画仕様・旧C#版との差分)、MIGRATION_NOTES.md(C#→U#移植ノート・失敗学習)CANVAS_MAIN_COORDS.md/SEQUENCE.mdを Docs/ に移動
入力
-
InputHandler を OnPointerClick 方式に切り替え
VRCUiShapeのOnPointerClick(PointerEventData)でローカル座標を取得しGameManager.OnCellInput()に直接接続- 旧実装(VRコントローラレイキャスト +
Update+Interact())はコメントアウト保存。デスクトップで BoxCollider 厚みによる位置ずれが発生していた既知問題の回避も兼ねる OnPointerClickLocal()もゲームロジックに接続(以前はデバッグ表示専用だった)eventData.pressEventCameraは Udon 非公開 →public Camera worldCameraを Inspector アサイン方式に変更eventData.pointerPressRaycast.localPointはRaycastResultに存在しない(CS1061) →pressPosition+Camera.ScreenPointToRay+Plane.Raycastに変更
-
RogueSceneSetup をOnPointerClick方式に対応
VRC_UiShapeを Canvas_Main に自動追加するよう変更(旧: 削除していた)BoxCollider.size.z = 0に変更(Canvas 平面と一致。z厚みはデスクトップ位置ずれの原因だった)InputHandler.worldCameraにCamera.mainを自動アサイン。未検出時は Warning 出力- 確認事項ログを更新(Canvas Layer 設定の手動手順を追加)
修正
-
非オーナー側でスタート→ゲーム遷移後に画面が更新されない
- 原因①:
DungeonGenerator.RequestSync()→_FlushSync()内のNetworking.IsOwner(gameObject)チェックでgameObjectは DungeonGenerator 自身を指す。StartGame()でGameManagerだけオーナーを取得していたため、DungeonGenerator の_FlushSyncがreturnしてRequestSerialization()が呼ばれず、非オーナー側のOnDeserializationが発火しなかった。 - 対応①:
_AcquireOwnership()内でdungeonGenerator.gameObjectのオーナーシップも同時に取得するよう修正。 - 原因②:
Start()で_initialized = falseのままRequestSerialization()を呼んでいたため、その間に届いたOnDeserializationがif (!_initialized) returnで無視される可能性があった。 - 対応②:
_initialized = trueをRequestSerialization()より前(Start()冒頭)に移動。
- 原因①:
-
壁マス・NOTHING セルにもハイライトが立ちクリック移動できた
- 原因:
DungeonGenerator.IsWalkable()がmap[y*W+x] != CELL_NOTHINGのみチェックしていたため、HWALL・VWALL もwalkableと判定されていた。reachable計算・PathFinder 経路探索の両方が影響を受けていた。 - 対応:
IsWalkable()をFLOOR / PASSAGE / DOOR / STAIRSのみ true を返すよう修正。
- 原因:
設計メモ
次に確認すること
- デスクトップのクリック位置ずれ:OnPointerClick + RogueSceneSetup 更新済み。VRCUiShape + Layer 設定で実機検証が必要
- VR 時の動作検証:OnPointerClick 方式で VR トリガーが正しく発火するか確認
- Canvas_Main の Layer を手動で Default/Environment に設定する(RogueSceneSetup では設定不可)
- シーンセットアップで
ascii art fileにtitle_characterをセット Use判定の無効化要否を検証- VRChat アップロード・動作検証