将 VR 应用移植到Windows Mixed Reality

Windows 10 支持沉浸式和全息头戴显示设备。 其他设备(如 Hts Rift 或TC Vive)依赖于操作系统平台 API 上方存在的库。 若要将现有的 Win32 Unity VR 应用引入Windows Mixed Reality,需要将特定于供应商的 VR SDK 用法重新定位到 Unity 的跨供应商 VR API 和插件

将 VR 应用移植到Windows Mixed Reality需要以下高级过程:

  1. 请确保电脑正在运行 Windows 10版本 1709 (Fall Creator 的更新) 或更高版本,或Windows 11
  2. 升级到图形或游戏引擎的最新版本。 游戏引擎必须支持 Windows 10 SDK 版本 10.0.15063.0 或更高版本。
  3. 升级中间件、插件和组件。 如果应用包含任何组件,请升级到最新版本。
  4. 面向最新的 Unity 版本和 OpenXR 插件。 删除与重复 SDK 的依赖关系。 根据内容的目标设备,删除或有条件地编译该 SDK。
  5. 请完成特定于应用、引擎和组件依赖项的生成问题。

常见移植步骤

使用以下常见移植步骤"开始"菜单:

  1. 确保具有正确的开发硬件。 VR 爱好者指南列出了推荐的开发硬件。

  2. 升级到最新版 Windows 10。

    1. 安装 Windows 10 创意者更新
    2. 加入Windows 预览体验计划
    3. 启用开发人员模式
    4. 通过设置更新&安全部分切换到 Windows >Insider Fast 外部测试版。

    注意

    Windows Mixed Reality 平台仍处于积极开发阶段。 加入Windows 预览体验计划以访问 Windows Insider Fast flight。 不要从预览体验成员跳过预告圈获取预览版,因为这些版本不是混合现实开发最稳定的版本。

  3. 如果使用 Visual Studio,请升级到最新的版本。 请参阅在 Visual Studio 2022 下安装工具。 请务必使用 Unity 工作负载安装 游戏开发

Unity 移植步骤

查看常见步骤,确保正确设置开发环境。 若要移植现有 Unity 内容,请执行以下步骤:

1.使用 Windows MR 支持升级到最新的 Unity 公共版本

  1. 在开始之前保存项目的副本。
  2. 下载具有Windows Mixed Reality支持的最新建议的 Unity 公共版本
  3. 如果项目是在较旧版本的 Unity 上生成的,请查看 Unity 升级指南
  4. 按照有关使用 Unity 的 自动 API 更新程序的说明进行操作。
  5. 查看是否需要进行任何其他更改才能使项目运行,并处理任何错误和警告。

2.将中间件升级到最新版本

使用任何 Unity 更新,可能需要更新游戏或应用程序所依赖的一个或多个中间件包。 更新到最新的中间件会增加在整个移植过程中成功的可能性。

3.以应用程序为目标,在 Win32 上运行

从 Unity 应用程序内部:

  1. 导航到文件>生成设置
  2. 选择 PC、Mac、Linux 独立版。
  3. 将目标平台设置为Windows
  4. 将体系结构设置为 x86
  5. 选择“切换平台”。

注意

如果应用程序对设备特定的服务有任何依赖项(例如从 Steam 进行匹配),请立即禁用它们。 稍后可以挂钩Windows等效服务。

4. 添加对 混合现实 OpenXR 插件的支持

  1. 选择并安装 Unity 版本和 XR 插件。 虽然具有 混合现实 OpenXR 插件的 Unity 2020.3 LTS 最适合混合现实开发,但还可以使用其他 Unity 配置生成应用。

  2. 删除或有条件地编译特定于另一个 VR SDK 的任何库支持。 这些资产可能会以与Windows Mixed Reality不兼容的方式更改项目的设置和属性。

    例如,如果项目引用 SteamVR SDK,请更新项目以改用 Unity 的常见 VR API,该 API 同时支持 Windows Mixed Reality 和 SteamVR。

  3. 在 Unity 项目中,以Windows 10 SDK 为目标

  4. 对于每个场景, 设置相机

5.设置Windows Mixed Reality硬件

  1. 查看 沉浸式头戴显示设备设置中的步骤。
  2. 了解如何使用Windows Mixed Reality模拟器导航Windows Mixed Reality主页

6. 使用舞台将内容放在地板上

可以跨各种体验规模构建混合现实体验。 如果要移植 座位规模体验,请确保 Unity 设置为 固定 跟踪空间类型:

XRDevice.SetTrackingSpaceType(TrackingSpaceType.Stationary);

此代码设置 Unity 的世界坐标系,以跟踪 固定的引用帧。 在固定跟踪模式下,在相机的默认位置前面放置的内容 (向前是 -Z) 在应用启动时显示在用户面前。 若要让用户重新定位坐位原点,可以调用 Unity 的 XR.InputTracking.Recenter 方法。

如果要移植 一个站立式体验房间规模体验,则相对于楼层放置内容。 使用 空间阶段(表示用户定义的楼层原点)来解释用户的地板。 空间阶段可以包含首次运行期间设置的可选房间边界。

对于这些体验,请确保 Unity 设置为 RoomScale 跟踪空间类型。 RoomScale 是默认值,但显式设置它并确保返回 true。 这种做法捕获了用户已将计算机移离校准房间的情况。

if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
    // RoomScale mode was set successfully.  App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
    // RoomScale mode was not set successfully.  App can't make assumptions about where the floor plane is.
}

应用成功设置 RoomScale 跟踪空间类型后,y=0 平面上放置的内容将显示在地板上。 (0, 0, 0) 的起源是用户在房间设置期间站在地板上的特定位置,-Z 表示他们在设置过程中面临的前进方向。

在脚本代码中,可以对类型调用 TryGetGeometry 该方法 UnityEngine.Experimental.XR.Boundary 以获取边界多边形,并指定边界类型 TrackedArea。 如果用户定义了边界,则返回顶点列表。 然后,你可以向用户提供 聊天室缩放体验 ,他们可以在创建场景周围走动。

当用户接近边界时,系统会自动呈现边界。 你的应用不需要使用此多边形来呈现边界本身。

结果示例:

Example of results

有关详细信息,请参阅 Unity 中的坐标系

7. 处理输入模型

面向现有头装显示器的每个游戏或应用程序 (HMD) 都有一组输入,它处理了一组输入、体验所需的输入类型,以及它调用的特定 API 来获取这些输入。 利用Windows Mixed Reality中提供的输入非常简单。

有关Windows Mixed Reality如何公开输入以及输入如何映射到应用程序现在执行的操作的详细信息,请参阅 Unity 的输入移植指南

重要

如果使用 HP Reverb G2 控制器,请参阅 Unity 中的 HP Reverb G2 控制器 以获取进一步的输入映射说明。

8.测试和优化性能

Windows Mixed Reality在许多设备上可用,包括高端游戏电脑和广泛的市场主流电脑。 这些设备具有截然不同的计算和图形预算,可供应用程序使用。

如果使用具有大量计算和图形预算的高级电脑移植应用,请务必在代表目标市场的硬件上测试和分析应用。 有关详细信息,请参阅Windows Mixed Reality最低电脑硬件兼容性指南

UnityVisual Studio 都包括性能探查器,并且 MicrosoftIntel 都发布有关性能分析和优化的准则。

有关性能的广泛讨论,请参阅了解混合现实的性能。 有关 Unity 的特定详细信息,请参阅 Unity 的性能建议

输入映射

有关输入映射信息和说明,请参阅 Unity 的输入移植指南

重要

如果使用 HP Reverb G2 控制器,请参阅 Unity 中的 HP Reverb G2 控制器 以获取进一步的输入映射说明。

另请参阅