【问题标题】:How do you detect whether your Mixed Reality app is running on HoloLens 1, HoloLens 2 or an immersive headset?如何检测您的混合现实应用程序是在 HoloLens 1、HoloLens 2 还是沉浸式耳机上运行?
【发布时间】:2020-06-05 15:33:39
【问题描述】:

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

【问题讨论】:

    标签: hololens mrtk


    【解决方案1】:

    如果您使用 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 和沉浸式耳机都应该返回不同的字符串。

    2020 年 6 月 5 日编辑:

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

    if (Application.platform == RuntimePlatform.WSAPlayerARM)
    {
         // Running HoloLens 2, most likely.
    }
    

    【讨论】:

      【解决方案2】:

      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);
      
      

      【讨论】:

        【解决方案3】:

        检查它是否不透明(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
        

        【讨论】:

          猜你喜欢
          • 2021-10-29
          • 2022-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多