如何检测您的Mixed Reality应用程序是在HoloLens 1,HoloLens 2还是沉浸式耳机上运行?

时间:2019-08-19 08:01:26

标签: hololens mrtk

混合现实应用程序可以很快在三种设备上运行:HoloLens 1,Hololens 2和沉浸式(VR)耳机。某些行为可能会有所不同,具体取决于您运行该应用程序的设备的类型。如何询问SDK我的应用当前正在运行哪种设备?

3 个答案:

答案 0 :(得分:3)

如果您使用的是MRTK(我注意到您可能基于您的标签),那么最好的方法是使用platform capabilities utility,因为它可以在新设备问世并跨平台使用时起作用。例如,您可以选择“我的设备是否支持铰接的手?”,而不是选择“在HoloLens 2上开机”。然后,它将在支持关节手的其他平台上工作。例如,请在MRTK示例中检查MixedRealityToolkit.Examples/Demos/Utilities/Scenes/MixedRealityCapabilityDemo.unity

如果现在需要临时解决方案以区分WMR与HL1与HL2,可以使用以下代码。请注意,它仅适用于Windows:

using Windows.Security.ExchangeActiveSyncProvisioning;

EasClientDeviceInformation CurrentInfo = new EasClientDeviceInformation();
string sku = CurrentInfo.SystemSku;

HoloLens 1,HoloLens 2和沉浸式耳机应全部返回不同的字符串。

答案 1 :(得分:0)

HolographicDisplay.GetDefault().IsOpaque对于沉浸式VR耳机为true,而对于HoloLens等AR设备为false。

对于HoloLens,您不需要检测精确的设备系列。相反,您应该通过通用合同版本(如

)检查功能支持
bool checkUniversalApiContract(int contractNumber)
{
    return winrt::Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent(L"Windows.Foundation.UniversalApiContract", contractNumber);
}

bool supportsHandTracking = checkUniversalApiContract(8);

答案 2 :(得分:0)

要检查其是否不透明(VR)(AR):

#if UNITY_2017_2_OR_NEWER
            bool isOpaque = UnityEngine.XR.WSA.HolographicSettings.IsDisplayOpaque;
#else
            bool isOpaque = UnityEngine.VR.VRDevice.isPresent;
#endif

要检查它是HL1还是HL2,这是一个简单的解决方案,不需要其他dll:

#if UNITY_WSA || UNITY_WSA_10_0
            // Get vertical field of view in degrees
            // HL1  == 17.5, HL2 == 29
            bool isHL1  = (Camera.main.fieldOfView < 23f);
#endif