3D アプリ起動ツールの実装 (UWP アプリ)

Note

この機能は、イマーシブ ヘッドセット用の 2017 Fall Creators Update (RS3) の一部として追加され、Windows 10 April 2018 Update を搭載した HoloLens でサポートされています。 イマーシブ ヘッドセットでは 10.0.16299 以上、HoloLens では 10.0.17125 以上のバージョンの Windows SDK をアプリケーションの対象としていることを確認してください。 最新の Windows SDK はこちらで見つかります。

Windows Mixed Reality ホームは出発点であり、ユーザーはここに移動してからアプリケーションを起動します。 Windows Mixed Reality 用の UWP アプリケーションを作成する場合、既定では、アプリはアプリのロゴを含む 2D スレートとして起動されます。 Windows Mixed Reality 向けのアプリケーションのエクスペリエンスを開発しているときに、必要に応じて 3D 起動ツールを定義してアプリケーションの既定の 2D 起動ツールをオーバーライドすることができます。 一般に、ユーザーを Windows Mixed Reality ホームから連れ出すイマーシブ アプリケーションを起動するときには、3D 起動ツールが推奨されます。 アプリがその場所でアクティブ化される場合は、既定の 2D 起動ツールが推奨されます。 2D UWP アプリ内のコンテンツへの 3D 起動ツールとして 3D ディープ リンク (secondaryTile) を作成することもできます。

3D アプリ起動ツールの作成プロセス

3D アプリ起動ツールを作成するには、次の 3 つの手順を実行します。

  1. 設計と構想
  2. モデリングとエクスポート
  3. アプリケーションへの統合 (この記事)

アプリケーションの起動ツールとして使用する 3D アセットは、互換性を確保するために Windows Mixed Reality オーサリングのガイドラインを使用して作成する必要があります。 このオーサリング仕様に沿っていないアセットは、Windows Mixed Reality ホームにレンダリングされません。

3D 起動ツールの構成

Visual Studio で新しいプロジェクトを作成すると、アプリの名前とロゴを表示する単純な既定のタイルが作成されます。 この 2D 表現をカスタム 3D モデルに置き換えるには、アプリケーションのアプリ マニフェストを編集して、既定のタイル定義の一部として "MixedRealityModel" 要素を含めます。 2D 起動ツールに戻す場合は、マニフェストから MixedRealityModel 定義を削除するだけです。

XML

まず、現在のプロジェクトでアプリケーション パッケージ マニフェストを見つけます。 既定では、マニフェストの名前は Package.appxmanifest になっています。 Visual Studio を使用している場合は、ソリューション ビューアーでマニフェストを右クリックし、[ソースの表示] を選択して編集する xml を開きます。

マニフェストの一番上に 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">

次に、アプリケーションの既定のタイルで "MixedRealityModel" を指定します。

<Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="ExampleApp.App">
      <uap:VisualElements
        DisplayName="ExampleApp"
        Square150x150Logo="Assets\Logo.png"
        Square44x44Logo="Assets\SmallLogo.png"
        Description="ExampleApp"
        BackgroundColor="#464646">
        <uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" >
          <uap5:MixedRealityModel Path="Assets\My3DTile.glb" />
        </uap:DefaultTile>
        <uap:SplashScreen Image="Assets\SplashScreen.png" />
      </uap:VisualElements>
    </Application>
</Applications>

MixedRealityModel 要素は、アプリ パッケージに格納されている 3D アセットを指すファイル パスを受け入れます。 現在サポートされているのは、.glb ファイル形式を使用して配布され、Windows Mixed Reality 3D アセット作成手順に従って作成された 3D モデルのみです。 アセットはアプリ パッケージに格納されている必要があります。アニメーションは現在サポートされていません。 "Path" パラメーターが空白のままの場合、Windows は、3D 起動ツールの代わりに 2D スレートを表示します。 注: アプリをビルドして実行する前に、ビルド設定で .glb アセットを "Content" とマークする必要があります。

ソリューション エクスプローラーで .glb を選択し、properties セクションを使用して、ビルド設定で
ソリューション エクスプローラーで .glb を選択し、properties セクションを使用して、ビルド設定で "Content" としてマークする

境界ボックス

境界ボックスを使用して、必要に応じて、オブジェクトの周囲に追加のバッファー領域を追加できます。 境界ボックスは、中心点とエクステントを使用して指定されます。これは、境界ボックスの中心から各軸に沿った端までの距離を示します。 境界ボックスの単位は、1 単位 = 1 メートルにマップできます。 境界ボックスが提供されていない場合は、オブジェクトのメッシュに自動的に取り付けられます。 指定された境界ボックスがモデルよりも小さい場合は、メッシュに合わせてサイズが変更されます。

境界ボックス属性のサポートは、Windows RS4 更新プログラムで、MixedRealityModel 要素のプロパティとして追加されます。 境界ボックスを定義するには、アプリ マニフェストの一番上に uap6 スキーマを追加し、無視可能な名前空間としてそれをインクルードします。

<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"
         xmlns:uap6="http://schemas.microsoft.com/appx/manifest/uap/windows10/6"
         IgnorableNamespaces="uap uap2 uap5 uap6 mp"
         xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

次に、MixedRealityModel で SpatialBoundingBox プロパティを設定して境界ボックスを定義します。

        <uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" >
          <uap5:MixedRealityModel Path="Assets\My3DTile.glb">
              <uap6:SpatialBoundingBox  Center=”1,-2,3” Extents=”1,2,3” />
          </uap5:MixedRealityModel>
        </uap:DefaultTile>

Unity の使用

Unity を使用する場合は、アプリ マニフェストを編集する前に、Visual Studio でプロジェクトをビルドして開く必要があります。

Note

Unity から新しい Visual Studio ソリューションをビルドおよび展開するときに、マニフェストで 3D 起動ツールを再定義する必要があります。

Note

この機能は、イマーシブ (VR) ヘッドセット用の 2017 Fall Creators Update (RS3) の一部として、および HoloLens 用の April 2018 Update (RS4) の一部として追加されました。 イマーシブ (VR) ヘッドセットでは 10.0.16299 以上、HoloLens では 10.0.17125 以上のバージョンの Windows SDK をアプリケーションの対象としていることを確認してください。 最新の Windows SDK はこちらで見つかります。

重要

3D ディープ リンク (secondaryTiles) は、2D UWP アプリでのみ機能します。 ただし、3D アプリ 起動ツールを作成して、Windows Mixed Reality ホームから排他的アプリを起動することはできます。

Windows スタート メニュー の 2D セカンダリ タイルと同様に、2D アプリ内のコンテンツへのディープ リンクとしてアプリから Windows Mixed Reality ホームに 3D モデルを配置する機能を追加することで、Windows Mixed Reality 用に 2D アプリケーションを拡張することができます。 たとえば、360° フォト ビューアー アプリに直接リンクする 360° のフォトスフィアを作成したり、資産のコレクションから作成者に関する詳細ページを開く 3D コンテンツをユーザーが配置できるようにしたりすることができます。 これらは、3D コンテンツを使用して 2D アプリケーションの機能を拡張する方法のほんの一部です。

3D "secondaryTile" の作成

作成時に Mixed Reality モデルを定義することで、"secondaryTiles" を使用してアプリケーションから 3D コンテンツを配置できます。 Mixed Reality モデルは、アプリ パッケージ内で 3D アセットを参照し、必要に応じて境界ボックスを定義することによって作成されます。

Note

排他ビュー内から "secondaryTiles" を作成する方法は現在サポートされていません。

using Windows.UI.StartScreen;
using Windows.Foundation.Numerics;
using Windows.Perception.Spatial;

// Initialize the tile
SecondaryTile tile = new SecondaryTile("myTileId")
{
    DisplayName = "My Tile",
    Arguments = "myArgs"
};

tile.VisualElements.Square150x150Logo = new Uri("ms-appx:///Assets/MyTile/Square150x150Logo.png");

//Assign 3D model (only ms-appx and ms-appdata are allowed)
TileMixedRealityModel model = tile.VisualElements.MixedRealityModel;
model.Uri = new Uri("ms-appx:///Assets/MyTile/MixedRealityModel.glb");
model.ActivationBehavior = TileMixedRealityModelActivationBehavior.Default;
model.BoundingBox = new SpatialBoundingBox
{
    Center = new Vector3 { X = 1, Y = 0, Z = 0 },
    Extents = new Vector3 { X = 3, Y = 5, Z = 4 }
};

// And place it
await tile.RequestCreateAsync();

境界ボックス

境界ボックスを使用して、オブジェクトの周囲に追加のバッファー領域を追加できます。 境界ボックスは、中心点とエクステントを使用して指定されます。これは、境界ボックスの中心から各軸に沿った端までの距離を示します。 境界ボックスの単位は、1 単位 = 1 メートルにマップできます。 境界ボックスが提供されていない場合は、オブジェクトのメッシュに自動的に取り付けられます。 指定された境界ボックスがモデルよりも小さい場合は、メッシュに合わせてサイズが変更されます。

アクティブ化の動作

Note

この機能は、Windows RS4 Update の時点でサポートされます。 この機能を使用する予定の場合は、アプリケーションが 10.0.17125 以上のバージョンの Windows SDK を対象としていることを確認してください

3D secondaryTile のアクティブ化動作を定義して、ユーザーが選択した場合の反応をコントロールできます。 これを使用すると、純粋に情報提供や装飾を目的とした 3D オブジェクトを Mixed Reality ホームに配置できます。 次の種類のアクティブ化動作がサポートされています。

  1. 既定値: ユーザーが 3D secondary を選択したときに、アプリがアクティブ化されます。
  2. なし: ユーザーが 3D secondaryTile を選択したときに、何も起こらず、アプリはアクティブ化されません。

既存の "secondaryTile" の取得と更新

開発者は、以前に指定されたプロパティを含む既存のセカンダリ タイルの一覧を取得できます。 また、値を変更してから UpdateAsync() を呼び出すことによって、プロパティを更新することもできます。

// Grab the existing secondary tile
SecondaryTile tile = (await SecondaryTile.FindAllAsync()).First();

Uri updatedUri = new Uri("ms-appdata:///local/MixedRealityUpdated.glb");

// See if the model needs updating
if (!tile.VisualElements.MixedRealityModel.Uri.Equals(updatedUri))
{
    // Update it
    tile.VisualElements.MixedRealityModel.Uri = updatedUri;

    // And apply the changes
    await tile.UpdateAsync();
}

ユーザーが Windows Mixed Reality を使用していることを確認する

3D ディープ リンク (secondaryTile) は、ビューが Windows Mixed Reality ヘッドセットに表示されている間にのみ作成できます。 ビューが Windows Mixed Reality ヘッドセットに表示されていない場合は、エントリ ポイントを非表示にするか、エラー メッセージを表示して、これを適切に処理することをお勧めします。 これは、IsCurrentViewPresentedOnHolographic() のクエリを実行することで確認できます。

タイル通知

タイル通知では、現在、3D アセットを含む更新の送信はサポートされていません。 これは、開発者が次の操作を実行できないことを意味します。

  • プッシュ通知
  • 定期的なポーリング
  • スケジュールされた通知

その他のタイルの機能と属性、および 2D タイルでのタイルの使用方法の詳細については、UWP アプリのタイルに関するドキュメントを参照してください。

関連項目