将 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,需要执行下面的大致过程:
- 确保电脑正在运行 Windows 10 版本 1709(Fall Creator 更新)或更高版本,或者 Windows 11。
- 升级到图形或游戏引擎的最新版本。 游戏引擎必须支持 Windows 10 SDK 版本 10.0.15063.0 或更高版本。
- 升级中间件、插件或组件。 如果应用包含任何组件,请升级到最新版本。
- 面向最新的 Unity 版本和 OpenXR 插件。 删除与重复 SDK 的依赖关系。 根据内容面向的设备,删除或有条件地编译该 SDK。
- 解决特定于应用、引擎和组件依赖项的生成问题。
常见移植步骤
从以下常见的移植步骤开始:
确保具有正确的开发硬件。 VR 发烧友指南列出了推荐的开发硬件。
升级到 Windows 10 的最新外部测试版。
- 安装 Windows 10 创意者更新
- 加入 Windows 预览体验计划。
- 启用开发人员模式
- 通过“设置”>“更新和安全”部分切换到“Windows 预览体验成员 - 快”外部测试版。
注意
Windows Mixed Reality 平台仍处于积极开发阶段。 加入 Windows 预览体验计划以访问“Windows 预览体验成员 - 快”外部测试版。 不要从“预览体验成员 - 超前更新”通道接收预览版,因为这些版本对混合现实开发来说不是最稳定的。
如果使用的是 Visual Studio,请升级到最新版本。 请参阅 Visual Studio 2022 下的安装工具。 请务必安装“使用 Unity 开发游戏”工作负载。
Unity 移植步骤
查看常见步骤,确保正确设置开发环境。 若要移植现有 Unity 内容,请执行以下步骤:
1.升级到支持 Windows MR 的 Unity 的最新公共版
- 在开始之前保存项目的副本。
- 下载支持 Windows Mixed Reality 的 Unity 的最新推荐公共版。
- 如果项目是使用较低版本的 Unity 生成的,请查看 Unity 升级指南。
- 按照说明使用 Unity 的自动 API 更新服务。
- 查看是否需要进行任何其他更改才能使项目运行,并处理任何错误和警告。
2.将中间件升级到最新版本
借助任何 Unity 更新,都可能需要更新游戏或应用程序所依赖的一个或多个中间件包。 更新到最新中间件可提高成功完成移植过程其余步骤的可能性。
3.以要在 Win32 上运行的应用程序为目标
从 Unity 应用程序内部:
- 导航到“文件”>“生成设置”。
- 选择“电脑、Mac 和 Linux 独立”。
- 将目标平台设置为 Windows。
- 将体系结构设置为 x86。
- 选择“切换平台”。
注意
如果应用程序与特定于设备的服务存在任何依赖项(例如从 Steam 进行匹配),现在请禁用这些依赖项。 稍后可连接到 Windows 等效服务。
4.添加对混合现实 OpenXR 插件的支持
选择并安装 Unity 版本和 XR 插件。 虽然最适合使用带有混合现实 OpenXR 插件的 Unity 2020.3 LTS 进行混合现实开发,但你也可使用其他 Unity 配置来构建应用。
删除或有条件地编译特定于其他 VR SDK 的任何库支持。 这些资产可能会用与 Windows Mixed Reality 不兼容的方式更改项目的设置和属性。
例如,如果项目引用 SteamVR SDK,那么请更新项目,转而使用 Unity 的常见 VR API,这些 API 支持 Windows Mixed Reality 和 SteamVR。
在 Unity 项目中,以 Windows 10 SDK 为目标。
对于每个场景,都请设置相机。
5.设置 Windows Mixed Reality 硬件
- 查看沉浸式头戴显示设备设置中的步骤。
- 了解如何使用 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 表示设置过程中面对的正前方。
然后在脚本代码中,可以在 UnityEngine.Experimental.XR.Boundary
类型上调用 TryGetGeometry
方法来获取边界多边形,并指定 TrackedArea
的边界类型。 如果用户定义了边界,则返回顶点列表。 然后,可以向用户提供房间规模体验,在该体验中,用户可在你创建的场景中四处走动。
当用户接近边界时,系统会自动渲染边界。 你的应用不需要使用此多边形来呈现边界本身。
结果示例:
有关详细信息,请参阅 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 最低电脑硬件兼容性指南。
Unity 和 Visual Studio 都包括性能探查器,并且 Microsoft 和 Intel 都发布有关性能分析和优化的准则。
有关性能的广泛讨论,请参阅了解混合现实的性能。 有关 Unity 的特定详细信息,请参阅 Unity 性能建议。
输入映射
有关输入映射信息和说明,请参阅 Unity 的输入移植指南。
重要
如果使用 HP Reverb G2 控制器,请参阅 Unity 中的 HP Reverb G2 控制器来获取进一步的输入映射说明。