如何检测Mixed Reality应用当前运行的设备类型(HoloLens/沉浸式头显)
如何检测Mixed Reality应用当前运行的设备类型?
嘿,这个问题我太熟了!在开发跨设备的MR应用时,区分HoloLens 1、HoloLens 2和沉浸式VR头显是很常见的需求,下面给你两种实用的实现方案,看你项目需求选就行:
方案一:使用Mixed Reality Toolkit (MRTK)(推荐)
如果你用Unity开发MR应用,MRTK已经帮我们封装好了设备识别的逻辑,不用自己折腾底层API,兼容性还强。步骤很简单:
- 确保你的Unity项目已经导入并配置好MRTK(版本建议用2.x或以上)
- 在代码中通过MRTK的核心服务获取当前设备类型:
using Microsoft.MixedReality.Toolkit; using Microsoft.MixedReality.Toolkit.Input; // 获取当前输入系统的设备类型 var currentDeviceType = CoreServices.InputSystem.DeviceType; // 根据设备类型执行不同逻辑 switch (currentDeviceType) { case DeviceType.HoloLens1: Debug.Log("当前运行在HoloLens 1上"); // 这里写HoloLens 1专属逻辑 break; case DeviceType.HoloLens2: Debug.Log("当前运行在HoloLens 2上"); // 这里写HoloLens 2专属逻辑(比如眼动追踪、手部交互) break; case DeviceType.WindowsMixedReality: Debug.Log("当前运行在沉浸式VR头显上"); // 这里写VR头显专属逻辑(比如手柄交互、空间定位) break; default: Debug.Log("未知设备类型"); break; }
这个方案的好处是:MRTK会自动处理不同设备的硬件特性差异,你只需要关注业务逻辑就行,不用自己做版本或硬件检测。
方案二:直接调用UWP原生API(适合非Unity或自定义场景)
如果你的项目没有用MRTK,或者是纯UWP应用,那就可以直接调用UWP的原生API来识别设备:
第一步:判断是否为全息设备(HoloLens系列)
先通过设备家族区分HoloLens和沉浸式VR:
using Windows.System.Profile; // 检查设备家族:HoloLens系列的设备家族是"Windows.Holographic" bool isHolographicDevice = AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Holographic";
第二步:区分HoloLens 1和HoloLens 2
HoloLens 2支持手部追踪、眼动追踪等特性,而HoloLens 1不支持,我们可以通过硬件能力来判断:
using Windows.Devices.Input; using System.Linq; if (isHolographicDevice) { // 获取指针设备的能力 var pointerDevice = PointerDevice.GetPointerDevices().FirstOrDefault(); if (pointerDevice != null) { // HoloLens 2支持手部追踪,具备触觉反馈和指向能力 bool supportsHandTracking = pointerDevice.Capabilities.HasFlag(PointerDeviceCapabilities.Haptics) && pointerDevice.Capabilities.HasFlag(PointerDeviceCapabilities.Pointing); if (supportsHandTracking) { // 当前是HoloLens 2 } else { // 当前是HoloLens 1 } } // 另一种方式:通过系统版本判断 // HoloLens 1的最高系统版本是10.0.17763,HoloLens 2从10.0.18362开始 var osVersion = System.Environment.OSVersion.Version; if (osVersion.Major == 10 && osVersion.Build >= 18362) { // HoloLens 2 } else { // HoloLens 1 } } else { // 当前是沉浸式VR头显(比如Windows Mixed Reality头戴设备) }
注意事项
- 用MRTK方案时,要确保项目配置了对应设备的MRTK配置文件,否则设备识别可能不准确
- 原生API方案需要自己处理更多边界情况,比如部分第三方VR设备的识别
- 测试时尽量用真实设备验证,模拟器可能存在识别偏差
内容的提问来源于stack exchange,提问作者LocalJoost
相关产品推荐
相关产品推荐

