» VR開発メモトップへ

Unity + WebXR開発メモ(Oculus Quest、Chrome対応)

最終更新日:2021年09月10日

Unityでブラウザで動作するVRアプリを開発する方法についてまとめています。

更新履歴

(2021年9月10日)「コントローラーの入力を取得するには」を追加、「XR Interaction Toolkitは使える?」を更新
(2021年9月7日)Desertシーンのライトマップのサイズについて注記、「ビルドサイズを小さくするには」を追加
(2021年8月8日)ページ作成


ブラウザのVR/AR対応について

WebXR Device APIをはじめとした一連のAPIがあり、ブラウザでVR/ARアプリケーションを動かすことができます。詳細についてはいっこうさんの記事が詳しいです。

Oculus Quest

Oculus Questの標準ブラウザ(Oculus Browser)はWebXRに対応しています。WebXR対応ページに設置されているボタンを押すとVRモードに入り、コントローラーのOculusボタンを押すとVRモードを抜けるようになっています。

Oculus BrowserはChromiumベースで、下記ページにアップデート情報があります。

Chrome(Windows)

WindowsのChromeは現在標準でWebXRに対応しています。別途OculusソフトウェアやSteamVRのインストールが必要です。ChromeはKhronosのOpenXR規格を利用しており、ページに設置されているVRモードのボタンを押すと、現在アクティブになっているOpenXRランタイムを使用してVRモードに入ります。ヘッドセットをはずすとVRモードを抜けます。OculusソフトウェアやSteamVRの設定で、使用するOpenXRランタイムを選択します(下記画像を参照)。

UnityでWebXRアプリを作るには

De-Panther氏のWebXR Exportを使用すると、UnityのWebGLビルドを使用してブラウザで動作するVRアプリケーションを開発できます。

やはりネイティブアプリと比べてパフォーマンスの懸念があり、特にOculus Questにおいて、Unityから出力したWebXRアプリは、以前(2020年4月頃)はフレームレートがとても低かったり、起動に数十秒かかったりと厳しかったのですが、2021年8月現在、起動後少し待つと90fps出るようになったり(想像ですが、V8のLiftoffとTurboFanの2段構えのコンパイラの挙動でしょうか)、起動時間も最短で数秒から済むようになったりと大幅に状況が改善しています。

あくまでウェブページなので、大きなアセットを使用するコンテンツはページ表示の待ち時間やダウンロードにかかる転送料金で厳しいです。特にテクスチャは最小限に留めてインポート設定に注意し、場合によってはAssetBundleを利用する必要がありそうです。

WebXR Exportを使用する

WebXR Export の導入方法はこちらにあります。以下、サンプルシーンをビルドする手順のメモです。

  • Unity 2021.1で新規プロジェクトを作成し、プラットフォームをWebGLにする
  • Project Settings > Package Managerを開いて、Scoped Registriesに以下を追加
  • Package ManagerでMy Registriesに変更するとWebXR Export、WebXR Interactionsが出てくるのでインポート
  • WebXR InteractionsパッケージのSamplesからSample Sceneをインポート
  • Desertシーンを開く(Assets/Samples/WebXR Interactions/[version]-preview/Sample Scene/Scenes/Desertにあります)
  • Project Settings > XR Plug-in ManagementでWebXR Exportプラグインを有効にする
  • Window > WebXR > Copy WebGLTemplates を実行
  • Player SettingsのWebGL TemplateでWebXR2020またはWebXRFullView2020あたりを選択してビルド
  • ロードに失敗する場合はPlayer SettingsのDecompression Fallbackをオンにしてビルドする

あとは生成されたページをブラウザで開けばオーケーです。

下記スライドも参照してください(古いので注意点くらいしか参考にならないかも……そのうちページのほうに移植します)。

WebXRCameraSetについて

WebXR ExportのカメラリグはWebXRCameraSetプレハブを使用します。WebXRCameraSet/Camerasが通常時・VRモード・ARモードのカメラを子に持っており、WebXRCamera.csがモードによってカメラを切り替えているようです。

コントローラーの入力を取得するには

WebXRCameraSetプレハブのhandL、handRオブジェクトにアタッチされているWebXRController.csのGetAxis2DやGetButtonメソッドでコントローラーの状態を取得できます。例えば、

using WebXR;
...
[SerializeField] WebXRController leftHandWebXRController;
...
leftHandWebXRController.GetAxis2D(WebXRController.Axis2DTypes.Thumbstick);

でOculus Questのサムスティックの入力値が取得できます。

XR Interaction Toolkitは使える?

2021年9月現在はまだ使用できません。WebXRCameraSetはWebXR Interactionsを使用するリグになっており、今のところWebXR InteractionsはXR Interaction Toolkitとは無関係なサンプルになっています。xr_sdk_supportブランチでXR Interaction Toolkitサポートの開発が進められているようです。

エディタでVRモードで再生するには

WebXRCameraSetはOculus XR Pluginでも動作しますので、エディタからOculus Linkで再生できます。Project Settings > XR Plugin ManagementでStandaloneタブのOculusのチェックを入れて、プラットフォームをWindowsに変更して再生してみてください。

ビルドサイズを小さくするには

Unityのビルドサイズを小さくするには」にWebGLビルドを省サイズ化する方法についてまとめてみました。

Oculus Browserでデベロッパーツールを使用するには

PCのChromeからリモートのデベロッパーツールを開くことができます。開発者モードにしたQuestをUSB接続している(adb devicesで表示される)状態で、PCのChromeで chrome://inspect/#devices を開いて少々待つとQuestが検索表示されますので、inspectをクリックしてください。

ページを開く際も、URLをQuestのソフトウェアキーボードで入力するよりPCでデベロッパーツールから入力するほうが楽だと思います。

Unity公式のWebXRサポートは?

Unity公式によるWebXRサポートは、ロードマップによるとUnder Consideration(検討中)になっています(2021年8月現在)。将来的に公式サポートしたいものの、現在WebGLのモバイルサポートを優先している雰囲気で、だいぶ先になりそうです。

書いた人:こりん(@korinVR
» VR開発メモトップへ