HoloLens 2のOSがWindows 11になったことで、Unityアプリ内でWebViewが使えるようになったらしいのでサンプルを試してみました。
これまではUnity内でWebブラウザを表示することは非常に難しいので、別プロセスでEdgeを起動する方法で回避していましたが、使い勝手がイマイチなのでUnity内でのWebViewは待望の機能になります。
まずサンプルプロジェクトをダウンロードします
Mixed Reality Feature Toolをダウンロードします。(既にダウンロードしてある場合は不要)
MRFTを起動して、先ほどのサンプル内のUnityプロジェクト
WebView2Samples > GettingStartedGuides > HoloLens2_GettingStarted > HoloLens2GetStartedApp に対して、「Restore Features」を行います。
なお、MRFTが上手く動作しなかったので対処方法を教えてもらいました(感謝)
キャッシュが残っているのかも?https://t.co/IOpbKXcr4Q
— おがちょ (@ogacyo) June 17, 2023
Unityで上記プロジェクトを開きます。関連ライブラリの展開に時間がかかります。
Scenes > SampleSceneを開くと、WebViewプレファブが配置されたシーンが開きます。実行するとMSのページが表示されます。構造としてはシンプルですね。
いつものHoloLensアプリのようにビルドを行います。デバイスにはWindows11(Windows Holographic バージョン 23H1)が導入されている必要があります。
サンプルを実行してみると、「Back」やURL指定しての「Go」などは動作するのですが、肝心のブラウザ内での操作(スクロールやリンクのクリック)などは全く動作しません。あらためてシーンの構造を見てみると、ブラウザの表示部分はただのQuadにマテリアルが設定されたものなので、これでは当然何の操作もできません。
WebViewのレンダリング結果はただのマテリアルだった。
Unity座標系からWebView2の座標系に変換したりして自分で実装しないとなのか🤨https://t.co/gw9GNRfRf9 pic.twitter.com/Tb4U55Uft1
— とりカシュ (@torikasyu) June 17, 2023
改めて最初の公式ドキュメントを読んでみると
WebView2 は Unity の入力システムを認識していないので、Unity シーンとは異なる座標系を持つ可能性があります。 その結果、ポインターダウン イベントがある場合、その座標を WebView2 コントロールの座標系に変換する必要があります。 さらに、ポインターダウン イベントを適切な WebViewMouseEventData イベントの種類に変換する必要があります。
とあるように、Quad上でクリックやドラッグされたイベントを、WebViewの座標系とイベントに変換して送り込み、その結果を受け取るという実装を自分で書かないといけなさそうです。さすがにこれは大変なので、このあたりを含めたサンプルが出るのを期待しています<他力本願
—2023/7/24追記
他力本願していたら、アキヒロさんが早速作ってくれました。流石です!
これでHoloLens 2 内でブラウザが操作できるようになりました。