本日はHoloLensの調査枠です。
自作のUnityアプリに3Dアプリランチャーを実装します。
〇3Dアプリランチャーとは?
HoloLensでは排他的アプリの起動していない状態(通常のPCでいうところのデスクトップ画面)である[MixedRealityHome]からホームウィンドウを出しアプリを選択することでランチャーが配置され、アプリを起動します。
アプリを終了するとアプリランチャーは2Dウィンドウとしてその場に残り続けます。
2Dウィンドウをもう一度タップすることで再びアプリを起動することができます。
3Dアプリランチャーはこのウィンドウを3Dオブジェクトで表示させるものになります。
〇3Dアプリランチャーの例
・Playground

・Surfaces

・TypeInSpace

〇3Dアプリランチャーの作り方
・モデルの準備
初めに3Dアプリランチャー用の3Dモデルを用意します。
今回テストオブジェクトとしてBlenderのプリミティブSphere(Blenderで作成できる球)を使用します。
ワールドメニューから[エクスポート],[Gltf.2.0]でエクスポートします。

・アプリへの実装
UnityでアプリをビルドしVisual Studioで新しいプロジェクトを作成すると、アプリの名前とロゴを表示するデフォルトのタイルが作成されます。
このタイルを3D モデルに置き換えるには、アプリケーションのマニフェストを編集して、デフォルトタイル定義の一部として[MixedRealityModel]要素を含めます。
ソリューションエクスプローラーから[Package.appxmanifest]を開きます。最初にBlenerで作成したモデルをソリューションファイルに組み込みます。
ソリューションファイルの[Assets]下に作成したモデルを配置します。

続いてモデルとlauncherを同期させます。ソリューション ビューアでマニフェストを右クリックし、[ソースを表示] を選択して xml を開いて編集します。

筆者環境では[ソースを表示]が表示されなかったため、直接エクスプローラーから[Package.appxmanifest]を開きました。
マニフェストの先頭に uap5 スキーマを追加し、無視可能な名前空間としてインクルードします。
<Package xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2"
xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
IgnorableNamespaces="uap uap2 uap5 mp"
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">
次にApplicationsに<uap5:MixedRealityModel Path="Assets\(オブジェクト名).glb" />という分を加えます。
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint=Animation.App">
<uap:VisualElements DisplayName="AnimationPlayGround" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="Template_3D" BackgroundColor="transparent">
<uap:DefaultTile ShortName="AnimationPlayGround" Wide310x150Logo="Assets\Wide310x150Logo.png"> <uap5:MixedRealityModel Path="Assets\MyObject.glb" />
</uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="#FFFFFF" />
<uap:InitialRotationPreference>
<uap:Rotation Preference="landscape" />
<uap:Rotation Preference="landscapeFlipped" />
<uap:Rotation Preference="portrait" />
<uap:Rotation Preference="portraitFlipped" />
</uap:InitialRotationPreference>
</uap:VisualElements>
</Application>
</Applications>
後は通常のようにデプロイを行うことで3Dモデルがランチャーとして表示されます。
