VRC Rogue 2026/05/07


概要

非オーナー側同期バグ修正、仕様書整備(Docs/新設)、ハイライトバグ修正、入力方式をOnPointerClickに切り替え、オートムーブ1マスごと同期を実装。シーン構築ツール(RogueSceneSetup)をOnPointerClick方式に対応更新、INPUT_DESIGN.md を最新化。


変更点

同期

  • _AcquireOwnership() に DungeonGenerator のオーナーシップ取得を追加

    • GameManagergameObject だけでなく dungeonGenerator.gameObjectNetworking.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 方式に切り替え

    • VRCUiShapeOnPointerClick(PointerEventData) でローカル座標を取得し GameManager.OnCellInput() に直接接続
    • 旧実装(VRコントローラレイキャスト + Update + Interact())はコメントアウト保存。デスクトップで BoxCollider 厚みによる位置ずれが発生していた既知問題の回避も兼ねる
    • OnPointerClickLocal() もゲームロジックに接続(以前はデバッグ表示専用だった)
    • eventData.pressEventCamera は Udon 非公開 → public Camera worldCamera を Inspector アサイン方式に変更
    • eventData.pointerPressRaycast.localPointRaycastResult に存在しない(CS1061) → pressPosition + Camera.ScreenPointToRay + Plane.Raycast に変更
  • RogueSceneSetup をOnPointerClick方式に対応

    • VRC_UiShape を Canvas_Main に自動追加するよう変更(旧: 削除していた)
    • BoxCollider.size.z = 0 に変更(Canvas 平面と一致。z厚みはデスクトップ位置ずれの原因だった)
    • InputHandler.worldCameraCamera.main を自動アサイン。未検出時は Warning 出力
    • 確認事項ログを更新(Canvas Layer 設定の手動手順を追加)

修正

  • 非オーナー側でスタート→ゲーム遷移後に画面が更新されない

    • 原因①: DungeonGenerator.RequestSync()_FlushSync() 内の Networking.IsOwner(gameObject) チェックで gameObject は DungeonGenerator 自身を指す。StartGame()GameManager だけオーナーを取得していたため、DungeonGenerator の _FlushSyncreturn して RequestSerialization() が呼ばれず、非オーナー側の OnDeserialization が発火しなかった。
    • 対応①: _AcquireOwnership() 内で dungeonGenerator.gameObject のオーナーシップも同時に取得するよう修正。
    • 原因②: Start()_initialized = false のまま RequestSerialization() を呼んでいたため、その間に届いた OnDeserializationif (!_initialized) return で無視される可能性があった。
    • 対応②: _initialized = trueRequestSerialization() より前(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 filetitle_character をセット
  • Use 判定の無効化要否を検証
  • VRChat アップロード・動作検証

vrchat udonsharp unity gamedev devlog