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