将 VR 应用移植到Windows Mixed Reality

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

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

  1. 请确保你的电脑运行的是 Windows 10版本 1709 (Fall Creator's Update) 或更高版本,或者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 预览体验成员 Fast 外部测试版。

    注意

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

  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. 选择 “电脑”、“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, 0) 的原点是用户在房间设置期间站在地板上的特定位置,-Z 表示他们在设置过程中面对的方向。

在脚本代码中,可以针对 类型调用 TryGetGeometry 方法来 UnityEngine.Experimental.XR.Boundary 获取边界多边形,并将边界类型 TrackedArea指定为 。 如果用户定义了边界,则会返回顶点列表。 然后,你可以向用户提供 房间规模的体验 ,让用户可以在你创建的场景中四处走动。

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

结果示例:

结果示例

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

7. 完成输入模型

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

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

重要

如果使用 HP 混响 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 控制器 ,了解进一步的输入映射说明。

另请参阅