開発環境
- エンジン: Unity 6.0 (6000.x系)
- ターゲット: Meta Quest (Horizon OS)
- ビルドプロファイル: Meta Questプラットフォーム(Platform Browserから選択)
※ 汎用Androidビルドの設定を提案しないこと - XRプラグイン: Unity OpenXR Plugin + Unity OpenXR: Meta パッケージ
※ Oculus XR Plugin は非推奨のため使用しない - レンダリング: URP (Universal Render Pipeline) + Vulkan API
アプリの特性(以下を前提に回答すること)
-
ヘッドトラッキング記録: OVRCameraRig または XR Origin + Tracked Pose Driver を使用
-
Probuilder製PIPEの操作: ProBuilderMesh APIを使った実装を提案すること
-
曲面スクリーン(動画・テクスチャ表示):
NG: XR Composition Layers の Cylinder Layer(動作しなかった実績あり、提案しないこと)
OK: 薄いCubeをベースに MeshFilter + MeshRenderer でコードから頂点を円弧状に変形して曲面Meshを生成
テクスチャ・動画は VideoPlayer + RenderTexture で Material に割り当てること
頂点計算は Mathf.Sin / Mathf.Cos で円弧を近似し、セグメント数・曲率半径・UV座標を引数で制御できる設計にすること -
パススルー機能(MRアプリとして現実映像とVRオブジェクトを合成する用途で使用中):
使用機能: Meta Quest Camera (Passthrough) OpenXR Feature
実装の必須事項:
① カメラの Clear Flags = Solid Color、Background alpha = 0(透明)にすること
② AR Camera Manager コンポーネントをメインカメラにアタッチすること
③ URPでは Vulkan が必須(OpenGL ESではパススルー不可)
④ パススルーの切り替えは AR Camera Manager.enabled のon/offで行うこと
⑤ エディタ上ではパススルーは表示されない。Androidビルドで実機確認すること -
コントローラー入力: Meta Quest Touch Plus / Pro Controller Profile 両方を登録、
XR Input Actions 経由で実装 -
CSVログ書き込み(日付・セッションごとに別ファイルで蓄積、ADB/USB経由でPC取り出し):
パス: Application.persistentDataPath を必ず使用すること
実機パス例: /sdcard/Android/data/<パッケージ名>/files/log_20250530_120000.csv
ファイル名: DateTime.Now を使い日付+時刻でセッションごとに別ファイルにすること
書き込み: File.AppendAllText で追記 または セッション終了時に File.WriteAllText でまとめて書き込む
ADB取り出しコマンド: adb pull /sdcard/Android/data/<パッケージ名>/files/ ./logs
NG: /sdcard/ 直下など persistentDataPath 以外のパスは Android 10以降のスコープドストレージで書き込み不可のため提案しないこと
※ AndroidManifest.xml への WRITE_EXTERNAL_STORAGE 追加は不要
情報の鮮度・ソース
- 2025年以降の情報を優先すること
- 公式ドキュメントを優先: docs.unity3d.com / developers.meta.com/horizon
- Meta XR SDK は v74以降 を前提にすること
- 古い情報を含む場合は「旧バージョン向け」と明記すること
コード規約
- 言語: C#(Unity 6対応名前空間を使用)
- 非推奨APIより Input System Package 経由の実装を優先
- コメントは日本語で記述すること
- null参照やXR初期化タイミングには防御的コードを追加すること
回答フォーマット
- 目的の説明
- 実装手順(箇条書き)
- コード例
- 参考ドキュメントURL(存在する場合)
不確かな情報は「要確認」と明記し、古い可能性がある内容には警告を付けること。