0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI開発ルールプロンプト

0
Posted at

Meta Quest (Horizon OS) 開発環境・実装ルール

1. 開発環境・グラフィックス

  • エンジン: Unity 6.0 (6000.x系)
  • ターゲット: Meta Questプラットフォーム(Platform Browserから選択)
    ※汎用Androidビルドへの切り替えや提案は一貫して「NG」とする
  • XRプラグイン: Unity OpenXR Plugin + Unity OpenXR: Meta パッケージ
    ※Oculus XR Pluginは非推奨のため一切使用しない
  • レンダリング: URP (Universal Render Pipeline) + Vulkan API
    ※パススルー動作にVulkanが必須。OpenGL ESは使用不可

2. シーン構築基盤(Meta Building Blocks)

  • 基本方針: カメラリグやパススルーなどの主要なXR機能は、Meta公式の Building Blocks(Window > Meta XR > Building Blocks)を使用してシーンに配置・構築すること
  • 使用する主なブロック:
    • [Camera Rig] : OVRCameraRig ベースのカメラ基盤
    • [Passthrough] : URP/Vulkan環境用のパススルー自動設定

3. パススルー機能(MR合成)& デバッグ制限

  • 実装の必須要件:
    ① メインカメラ(CenterEyeAnchor)の設定: Clear Flags = Solid Color、Background alpha = 0(完全透明)にすること
    ② AR Camera Manager コンポーネントをメインカメラに必ずアタッチすること
    ③ パススルーのON/OFF切り替えは、AR Camera Manager.enabled の true/false で制御すること
  • デバッグ制限: 開発PCがLink非対応であるため、Unity Editor上(Playモード)ではパススルー映像は表示されない(背景は透過用カラーで描画される)。位置合わせや実像との合成確認は、必ずAndroidビルド(.apk)を実機に転送して行うこと

4. 車内MR空間の階層設計(追随 vs 通り抜け)

車に乗って移動するユースケースに対応するため、オブジェクトの性質に応じてヒエラルキーを厳密に分離すること。

  • ヘッドに追随するオブジェクト(車内環境・UI・インテリアなど):
    Building Blocksで生成された Camera Rig 内の TrackingSpace の子要素として配置する。これにより、車の移動や頭の動きに自動的に完全追随させる
  • 通りぬけるオブジェクト(車外環境・仮想障害物・パイプなど):
    Camera Rig の外側(ルート階層)に配置する。車の進行(擬似前進ロジック等)に合わせて、これらのオブジェクト、あるいはプレイヤー側の位置を相対的に移動させることで「通り抜け」を表現する

5. 入力システム(OVRInput & キーボードデバッグ)

  • 基本方針: 現在プロジェクトで安定動作している OVRInput をベースに実装を維持する(Building Blocks環境下でも OVRInput をそのまま使用)
  • Editorデバッグ対応: Link非対応PCでのEditor実行時(Application.isEditor)でも主要機能(移動・通り抜け、ログ開始、パススルー切替等)のテストができるよう、キーボード入力を割り当てたエミュレートロジックを共存させること
  • 例外処理: ヌル参照やXR初期化タイミングのバグを防ぐため、Editor実行時には OVRInput の生データ(コントローラー接続チェック等)を安全にバイパスする防御的コードを徹底すること

6. 曲面スクリーン(動画・テクスチャ表示)

  • 実装アプローチ: Thin-Cube(薄いCube)をベースに、MeshFilter + MeshRenderer を使用し、コードから頂点を円弧状に変形して曲面Meshを生成すること
    ※XR Composition Layersの Cylinder Layer は使用NG(動作しなかった実績あり)
  • 制御パラメータ: 頂点計算は Mathf.Sin / Mathf.Cos で円弧を近似し、セグメント数・曲率半径・UV座標を引数で動的に制御できる設計にすること。動画テクスチャの歪みを防ぐため、UV座標(u値)は円弧の弧長に対して等間隔にマッピングすること
  • 描画方法: 動画やテクスチャは VideoPlayer + RenderTexture を経由して、対象Materialに割り当てること

7. ProBuilder製のPIPE(パイプ)操作

  • 実装方法: シーン内のパイプオブジェクト(車外に配置され、通り抜ける対象など)の変形や操作には、ProBuilderMesh API を用いたスクリプト実装を提案・使用すること

8. CSVログ書き込み(データ蓄積 & スコープドストレージ対策)

  • 保存パス: Android 10以降のScoped Storage制約を回避するため、必ず Application.persistentDataPath を使用すること
    ※ /sdcard/ 直下などのカスタムパスへの保存提案は「一貫してNG」(書き込み不可エラーとなるため)。AndroidManifest.xmlへの WRITE_EXTERNAL_STORAGE 追加も不要
    ※実機パス例: /sdcard/Android/data/<パッケージ名>/files/log_yyyyMMdd_HHmmss.csv
  • ファイル管理: DateTime.Now を使用し、日付・時刻を含めたユニークなファイル名にすることで、セッションごとに別ファイルとして蓄積させること
  • 書き込み負荷対策: 毎フレームのI/Oによる処理落ち(スパイク)を防ぐため、メモリ(List や StringBuilder)にバッファリングし、セッション終了時や一定時間ごとに一括・非同期書き込みを行うこと
  • PCへの取り出し: PCとUSB接続し、以下のADBコマンドを用いて抽出すること
    adb pull /sdcard/Android/data/<パッケージ名>/files/ ./logs

9. コード規約・情報の鮮度

  • 言語・API: C#(Unity 6対応名前空間を使用)。コメントはすべて日本語で記述すること
  • 情報の鮮度: 2025年以降の情報・ドキュメントを最優先とする(Meta XR SDKは v74以降 を前提)。古い情報やレガシーAPIを提示する場合は「旧バージョン向け」と明記して警告を入れること

10. 回答フォーマット

  1. 目的の説明
  2. 実装手順(箇条書き)
  3. コード例
  4. 参考ドキュメントURL(存在する場合)
    不確かな情報は「要確認」と明記し、古い可能性がある内容には警告を付けること。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?