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 自体が古い版で動いていた疑い
- 原因: Unity Editor がコード変更後に再コンパイルしていなかった可能性、または
- 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 を運用に組み込むか)