【VR開発日記#8】Meta Quest 2でローカル動画再生!真っ黒画面からの脱出と試行錯誤

理想のVR部屋作りを進める中で、実現したかったのが「部屋の大型テレビで内部ストレージに入れた動画(MP4)を再生・切り替えする」機能でした。

結果から言うと、無事に動画が流れるようになりました!
しかし、ここに至るまでの道のりはかなりの遠回り。AIのGeminiに相談しながらC#スクリプトを書いてもらい、指示通りに進めたものの、実際にはよくわからない設定も多く、まさに「迷走」と呼ぶにふさわしい工程でした。

もっとスマートな手順が絶対にあると思いますが、自分が実際に行った作業をお伝えします。

Gemini頼みの開発:UnityとProject Settingsの沼

開発にあたっては、GeminiにC#スクリプトを書いてもらいつつ、Unityの画面やコンポーネント設定を確認しながら進めました。

① 3D空間とマテリアルのセットアップ

テレビの画面部分に M_TV_Screen マテリアルを作成して割り当てました。壁にはポスターも配置し、部屋としての見た目を整えています。

② Project SettingsでのAndroid設定

Quest 2(Android)で動作させるため、Project Settingsの「Player」設定を開きました。書き込み許可(Write Permission)を Internal から External (SDCard) に変更するなど、設定していきました。

画像

③ Video Playerとスクリプトの連携

TVオブジェクトに Video Player コンポーネントを配置し、ターゲットテクスチャへ TV_RenderTexture を割り当て。ソースを URL に指定した上で、Geminiに書いてもらったC#スクリプト VRVideoPlayerController をアタッチし、動画フォルダのパス(/storage/emulated/…)を指定しました。

画像

試行錯誤の全記録:言われるがまま設定を重ねた日々

PC上のUnity Editorで実行すると正常に動くのに、ビルドしてQuest 2実機に持っていくと「テレビが真っ黒のまま一切動かない」という現象が発生しました。

ここからGeminiとの長いトラブルシューティングが始まります。

  • スクリプト内のパス指定から file:// を削除する
  • 権限ダイアログを自動で呼び出すためのコルーチン処理を追加する
  • AndroidManifest.xml を直接編集して MANAGE_EXTERNAL_STORAGE などの権限コードを記述する

何度もAIにコードを書き換えさせたり設定を直しビルドして実行する作業を繰り返しましたが、一向に画面は黒いまま。完全に手詰まり状態になっていました。

奇跡の突破口:Geminiも教えてくれなかったQuest 2本体の設定

アプリ側の設定やコードをどれだけいじっても解決しませんでしたが、最終的な解決策はMeta Quest 2を被って以下の設定をすることでした。

Meta Quest 2本体の設定 > プライバシーと安全 > インストール済みのアプリ > (自作アプリを選択) > ストレージの設定を許可

なんと、ここを手動で「許可」に切り替えた瞬間、今までずっと黒かったVR空間のテレビに、内部ストレージの動画がスルリと映り出したのです!

Geminiはマニフェストの書き換えやアプリ内ダイアログの提案ばかりでしたが、Quest OSの奥深い設定階層から手動で許可を出す必要があったのが一番の原因でした。

まとめと妥協点:10秒スキップは諦めたけれど動いたからOK!

動画の切り替えだけで設定項目が非常に多く、本当はリモコン感覚で使える「10秒スキップ」などの機能も付けたかったのですが、仕組みが難しそうだったため今回は諦めました。まずは「動画がしっかり切り替わって再生されること」を優先です。

Geminiに言われるがまま設定したため、中には不要な設定も絶対に混ざっていると思いますが、今は正常に動いているので「結果オーライ」としました。

コメント

タイトルとURLをコピーしました