なんかいろいろしてみます

Jul 22, 2023 - 1 minute read - HoloLens

HoloLens の Unity アプリで WebView 2 を操作する

  • HoloLens 2 の Unity アプリ内で WebView が利用できるようになりました。
  • WebView2 の簡単な使い方とPointerによるマウス入力をHoloLensで行う処理を紹介します

動作環境

  • Unity 2022.3.5f1
  • MixedRealityToolkit(MRTK) 2.8.3
  • HoloLens 2 Windows 11

参考ページ

HoloLens 2 Unity アプリでの WebView2 の概要 (プレビュー) - Microsoft Edge Development

Mixed Reality WebView プラグインの API リファレンス (プレビュー) - Mixed Reality

Unity での WebView 利用手順

  • Unityプロジェクトに Microsoft Mixed Reality Feature Tool から以下のパッケージを追加
    • Microsoft Mixed Reality WebView (Preview) 0.17.1-pre.5
    • Mixed Reality Toolkit Foundation 2.8.3
    • Mixed Reality Toolkit Standard Assets 2.8.3
    • Mixed Reality OpenXR Plugin 1.8.1
  • HoloLens 2 用のMRTKの初期設定を行う
  • Unity Editor のメニューから Mixed Reality/Toolkit/Add to Scene and Configure… を選択
  • Packages/Microsoft Mixed Reality WebView (Preview)/Runtime/Prefab から WebView.prefab をシーンに配置
  • WebViewのCurrent URLに表示したいWebページのアドレスを入力
  • Universal Windows Platform (UWP) のARM64でBuildを行い HoloLens 2上で動作確認

Unity Editor のEditor拡張で表示確認

  • 以下のEditor拡張からUnity EditorのメニューからWebViewを表示することができます

    using UnityEngine;
    using UnityEditor;
        
    public class EditorWebViewControl : MonoBehaviour
    {
        [MenuItem("WebView/WindowTest")]
        static void Init()
        {
            var window = (EditorWebView)EditorWindow.GetWindow(typeof(EditorWebView));
            window.GetWebViewWhenReady(web => web.Load(new System.Uri("https://akihiro-document.azurewebsites.net/")));
            window.Show();
        }
    }

HoloLens 上で WebView を操作できるようにする

  • HoloLensでのWebViewの画面操作機能は提供されていないため、自前で実装する必要があります
  • マウス操作をHoloLensのPointerで代用することでクリックとスクロール操作を行います
  • マウス操作は IWithMouseEvents を経由してWebView内に伝えられます
  • 詳しい実装は以下のサンプルプロジェクトにあります

追記事項

  • 今回の実装ではマウス入力のみ実装しましたが、キーボードが接続されている場合にはキーボード入力が利用できるページもあります
    • 有線でHoloLens 2とキーボードを接続して確認
    • Youtube, Google検索などは利用可能
    • Microsoft Teamsでは利用不可
    • HoloLens搭載のシステムキーボードは利用不可
  • WindowsのStandaloneとUWPのほかにAndroidにPluginが対応している
  • 自分の環境では進むと戻る機能が動かなかった