实现 3D 应用启动器(UWP 应用)

注意

此功能是作为沉浸式头戴显示设备 2017 Fall Creators Update (RS3) 的一部分添加的,在装有 Windows 10 2018 年 4 月更新的 HoloLens 上受支持。 请确保你的应用程序面向沉浸式头戴显示设备上的 Windows SDK 10.0.16299 或更高版本以及 HoloLens 上的 SDK 版本 10.0.17125。 可在此处找到最新的 Windows SDK。

用户在启动应用程序之前,会先登陆到 Windows Mixed Reality 主页。 创建适用于 Windows Mixed Reality 的 UWP 应用程序时,默认情况下,应用将作为带有徽标的 2D 平板启动。 开发适用于 Windows Mixed Reality 的体验时,可以选择性地定义 3D 启动器来替代应用程序的默认 2D 启动器。 一般情况下,建议使用 3D 启动器来启动沉浸式应用程序,让用户离开 Windows Mixed Reality 主页。 就地激活应用时,最好是使用默认的 2D 启动器。 还可以创建一个 3D 深层链接(secondaryTile)作为 2D UWP 应用中内容的 3D 启动器。

3D 应用启动器创建过程

创建 3D 应用启动器的过程分为三个步骤:

  1. 设计和概念
  2. 建模和导出
  3. 将其集成到你的应用程序中(本文)

在创作要用作应用程序启动器的 3D 资产时,应参考 Windows Mixed Reality 创作指南,以确保兼容性。 不符合此创作规范的资产将不会在 Windows 混合现实主页中呈现。

配置 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 将显示 2D 平板而不是 3D 启动器。 注意:在生成并运行应用之前,.glb 资产必须在生成设置中标记为“Content”

Select the .glb in your solution explorer and use the properties section to mark it as
在解决方案资源管理器中选择 .glb,并使用 properties 部分在生成设置中将其标记为“Content”

边界框

边界框可用于选择性地在对象周围添加额外的缓冲区。 边界框是使用中心点和范围指定的,范围指示从边界框中心到其沿每个轴的边缘的距离。 边界框的单位可以映射到 1 个单位 = 1 米。 如果未提供边界框,则系统会自动提供适合对象网格的边界框。 如果提供的边界框小于模型,则系统会将其调整为适合网格的大小。

对边界框特性的支持将作为 MixedRealityModel 元素上的属性随 Windows RS4 更新一起提供。 若要先在应用清单顶部定义边界框,请添加 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 中生成并打开项目,然后才能编辑应用清单。

注意

从 Unity 生成和部署新的 Visual Studio 解决方案时,必须在清单中重新定义 3D 启动器。

注意

此功能已作为沉浸式 (VR) 头戴显示设备 2017 Fall Creators Update (RS3) 的一部分和 HoloLens April 2018 Update (RS4) 的一部分添加。 请确保你的应用程序面向沉浸式 (VR) 头戴显示设备上的 Windows SDK 10.0.16299 或更高版本以及 HoloLens 上的 SDK 版本 10.0.17125。 可在此处找到最新的 Windows SDK。

重要

3D 深层链接 (secondaryTiles) 仅适用于 2D UWP 应用。 但是,可以创建一个 3D 应用程序启动器,以从 Windows Mixed Reality 主页启动专属应用。

可以针对 Windows Mixed Reality 增强 2D 应用程序,方法是添加一项功能,用于将 3D 模型从应用放入 Windows Mixed Reality 主页,以作为 2D 应用中内容的深层链接,就像 Windows“开始”菜单中的 2D 辅助磁贴一样。 例如,可以创建直接链接到 360° 照片查看器应用的 360° 全景相片,或者让用户放置资产集合中的 3D 内容,从而打开有关作者的详细信息页。 这只是使用 3D 内容扩展 2D 应用程序功能的几种方法而已。

创建 3D“secondaryTile”

可通过在创建时定义混合现实模型,使用“secondaryTiles”放置应用程序中的 3D 内容。 通过引用应用包中的 3D 资产并选择性地定义边界框来创建混合现实模型。

注意

目前不支持从专属视图内部创建“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 米。 如果未提供边界框,则系统会自动提供适合对象网格的边界框。 如果提供的边界框小于模型,则系统会将其调整为适合网格的大小。

激活行为

注意

从 Windows RS4 更新开始支持此功能。 如果你打算使用此功能,请确保应用程序面向 Windows SDK 10.0.17125 或更高版本

可以定义 3D secondaryTile 的激活行为,以控制用户选择它时的响应方式。 secondaryTile 可用于将纯粹是参考性或装饰性的 3D 对象放入混合现实主页中。 支持以下激活行为类型:

  1. 默认:当用户选择 3D secondaryTile 时,将激活应用
  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 中

仅当 Windows Mixed Reality 头戴显示设备中正在显示视图时,才能创建 3D 深层链接 (secondaryTiles)。 如果你的视图未在 Windows Mixed Reality 头戴显示设备中显示时,我们建议通过隐藏入口点或显示错误消息来正常处理此问题。 可通过查询 IsCurrentViewPresentedOnHolographic() 进行检查。

磁贴通知

磁贴通知目前不支持使用发送包含 3D 资产的更新。 这意味着开发人员无法执行以下操作:

  • 推送通知
  • 定期轮询
  • 计划的通知

要详细了解其他磁贴功能和特性以及如何将其用于 2D 磁贴,请参阅 UWP 应用磁贴文档

另请参阅