3

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

4

3 回答 3

6

如果您使用 MRTK(我注意到您可能基于您的标签),那么最好的方法是使用平台功能实用程序,因为这将在新设备出现时跨平台工作。例如,您可以检查“我的设备是否支持铰接手?”,而不是检查“在 HoloLens 2 上开启”。然后,这将在支持关节手的其他平台上工作。例如,请查看MixedRealityToolkit.Examples/Demos/Utilities/Scenes/MixedRealityCapabilityDemo.unityMRTK 示例。

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

using Windows.Security.ExchangeActiveSyncProvisioning;

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

HoloLens 1、HoloLens 2 和沉浸式耳机都应该返回不同的字符串。

2020 年 6 月 5 日编辑:

也可以按如下方式检查运行时平台:

if (Application.platform == RuntimePlatform.WSAPlayerARM)
{
     // Running HoloLens 2, most likely.
}
于 2019-08-19T23:31:55.800 回答
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
于 2020-04-19T11:11:15.613 回答
0

HolographicDisplay.GetDefault().IsOpaque对于沉浸式 VR 耳机是正确的,对于 HoloLens 等 AR 设备是错误的。

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

bool checkUniversalApiContract(int contractNumber)
{
    return winrt::Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent(L"Windows.Foundation.UniversalApiContract", contractNumber);
}

bool supportsHandTracking = checkUniversalApiContract(8);

于 2019-08-19T10:23:39.003 回答