Appearance
V1.1(2025.8/8)
8/11更新
レイを矢印に当てると矢印の大きさが変わる機能を追加。
動画↓
なぜか右端に現実世界が録画されていますが録画の問題でアプリの体験とは関係ない不具合です。
なぜか右端に現実世界が録画されていますが録画の問題でアプリの体験とは関係ない不具合です。
目的
Meta Quest 3 実機で、コントローラーのレイ照準+トリガー入力により
Direction(矢印)やHotSpotをクリック相当として扱い、設定済みパノラマに切り替える。HMDの向き(Yaw)に合わせて矢印リングが水平方向のみ追従し、常に視認しやすい位置に表示する。
※ 垂直方向には追従しない。
操作方法(Meta Quest 3)
- コントローラーのレイを矢印に合わせる。
- Index Triggerを押す → 対応するパノラマに切り替わる。
- 頭の向きを変えると、矢印リングが水平方向に追従し正面付近に表示される。
シーンセットアップ
(Building Blocks/OVRCameraRig 前提)
1. コントローラー設定
OVRCameraRig/TrackingSpace/RightControllerAnchorにXRPointerToUPanoを追加rayOrigin: コントローラー先端の Transform(無ければ子にRayOriginを作成)hitLayers:Direction(後述の新規Layer)を指定triggerAction: 未設定可(フォールバック動作あり)。XRI 使用時は
XRI RightHand Interaction/Select Valueを割り当て推奨。
2. HMD追従設定
- 任意オブジェクトに
XRHeadToPanTiltを追加panos: 切替対象となる全てのPanoを登録head:OVRCameraRig/TrackingSpace/CenterEyeAnchorsyncTilt: OFF(垂直方向追従を無効化)
3. 当たり判定設定
DirectionManager(必要に応じてHotSpotManager)の Layer を新規Layer(例:Direction)へ変更→ 矢印インスタンスはこの Layer を引き継ぐ。
矢印Prefab(
defaultPrefabまたは各DirectionのPrefab)にColliderを追加(例:SphereCollider)。
4. 切替先設定
各
Directionの Inspector でswitchToPanoramaまたはloadPanoramaPrefabを設定。
実装概要
XRPointerToUPano.cs
- 役割: レイでヒットした
Direction/HotSpotのInteractiveElement.OnClickを呼び出し、uPanoの切替アクションを実行。 - 主要フィールド
rayOrigin(レイ起点)maxDistance(射程、既定20)hitLayers(対象Layer)triggerAction(Input System アクション、任意)useXRInputDevicesFallback(フォールバック入力有効化、既定ON)
- 入力判定フロー
triggerActionが設定されていればtriggeredまたはReadValue<float>() > 0.5- 無ければ XRデバイスの
triggerButton(保険でgripButton)を参照
- ヒット処理
Physics.Raycast→ ヒット先がDirectionInstanceorHotSpotInstance→element.OnClick.Invoke(element)
XRHeadToPanTilt.cs
- 役割: HMDのYawを複数
Panoに同期し、矢印リングを水平方向に追従させる。 - 主要フィールド
panos(同期対象)head(HMDカメラ)syncTilt(既定OFF)、clampTilt、tiltClamp
- 動作
Start: 各Pano.rotationMode = rotateGameObjectUpdate:yawを各Pano.panに反映(syncTiltON時は Pitch も同期)
注意点・制約
- Collider未設定 / Layer不一致 /
hitLayersの絞りすぎ → レイが当たらない。 switchToPanorama未設定 → 切替なし。- レイの forward がポインター方向と一致している必要。
トラブルシュート
- 反応しない
- 矢印PrefabにColliderがあるか
DirectionManagerの Layer がUPanoInteractableかXRPointerToUPano.hitLayersがUPanoInteractableを含むか(テスト時はEverything)rayOriginの forward が正しいかDirectionのswitchToPanoramaが設定されているか
- クリックは通るが矢印が正面に来ない
XRHeadToPanTilt.headがCenterEyeAnchorになっているかpanosの割当が正しいかsyncTiltが OFF か(垂直追従無効化)
導入チェックリスト
RightControllerAnchorにXRPointerToUPano追加 →rayOrigin設定 →hitLayers = UPanoInteractable- 矢印Prefabに Collider 追加、
DirectionManagerの Layer をUPanoInteractableへ XRHeadToPanTiltにpanos[]とheadを割当(syncTiltは OFF)Directionに切替先を設定(switchToPanorama/loadPanoramaPrefab)
Author: 村井 | Source:
村井\uPano×MetaQuest3でパノラマビューアプリデモ開発\V1 1(2025 8 8) 249aba435ee780e6b8b9e508fc99abf1.md