VRC Rogue 2026/05/12


概要

B 方式(input/uishape-laser / UiShape + OnPointerClick)を VR 実機検証。VRChat の入力モジュール仕様により VR ではマップクリックが動作しないことが確定。B はデスクトップ専用として確定し、VR 対応は C 方式(input/uishape-hover)に切替予定。


変更点

入力(B 方式の検証と修正)

  • B 方式のシーン構築強化
    • RogueSceneSetup で Canvas_Main の BoxCollider を Canvas 全体 (40x33) に拡大、Z 厚みを 1 に復元(VR レーザー判定の安定化)
    • RawImage_Map にも独自 BoxCollider を追加
    • RawImage_Map に Button (Selectable) を併設し、UiPointerClickRelay (IPointerClickHandler) と二重で経路確保
    • Button.onClick → SendCustomEvent("OnPointerClickByButton") をフォールバック配線
  • InputHandler に診断用 entry point を分離
    • OnPointerClickByStoredLocal (viaRelay 経路): IPointerClickHandler 発火時
    • OnPointerClickByButton (viaButton 経路): Button.onClick 発火時
    • DEBUG ウィンドウのログでどちらが効いているか判別可能に
  • UdonSharp の override 制約をドキュメント化
    • OnPointerClick(PointerEventData) を UdonSharpBehaviour で override すると CS0115。通常 MonoBehaviour の Relay 経由が必須
    • INPUT_DESIGN.md に「毎回ハマる箇所」セクションを追加

修正

  • VRC_UiShape が Setup スクリプトで追加されていなかった疑い
    • 原因: Unity Editor がコード変更後に再コンパイルしていなかった可能性、または _GetOrAddComponent<VRC_UiShape>(canvasGO) の前段でフロー断絶
    • 対応: Setup 完了時に Debug.Log で UiShape 追加状況を出力する診断ログを一時的に入れて再検証 → 実は Setup 自体が古い版で動いていた疑い
  • B 方式の Button.onClick 配線がシーン上で空欠
    • 原因: _AddSendCustomEventListener が呼ばれる前に古いコンパイル版 Setup が実行されていた可能性
    • 対応: 手動で Button.onClick に OnPointerClickByButton を再配線して再検証 → Button.onClick 経路は VR でも発火することを確認

設計メモ

  • B 方式 (UiShape + OnPointerClick) は VR 不可、デスクトップ専用に確定
    • VRChat の VR 入力モジュールは IPointerClickHandler を Selectable (Button 等) にしか dispatch しない
    • UiPointerClickRelay は通常 MonoBehaviour で IPointerClickHandler を実装しているだけなので Selectable ではない → VR で発火しない
    • Button.onClick (viaButton) は発火するが PointerEventData を渡せない → click 位置情報が取れない
    • 結果: VR では pointerLocalX/Y が更新されずデフォルト (0,0) のまま → セル (20, 0) に常に移動
  • VR 対応の本命は C 方式 (Update ベース hover + Button.onClick)
    • input/uishape-hover は既に Update で自前 VR レイを実装済み
    • pointerLocalX/Y を Update で常時更新 → Button.onClick (viaButton) で確定 → click 位置が hover 位置と一致
    • デスクトップ中心ズレ問題は A と同じ(自前レイ依存)が VR では実用上問題なし

次に確認すること

  • C 方式 (input/uishape-hover) で VR 動作検証
    • B から VRC_UiShape Setup 自動追加 + Canvas BoxCollider z=1 / 全体カバー + RawImage_Map に Button 配線 を cherry-pick
  • 下部ボタン UiShape 化 (Button.onClick) を C にも適用(B から cherry-pick)
  • C が動けば main マージ検討、ダメなら A 維持 + レーザー位置補正の道を探る
  • Setup スクリプトの再コンパイル問題(古い版が実行される現象)の根本対策(Reimport All を運用に組み込むか)

vrchat udonsharp unity gamedev devlog