混合现实应用很快可以在三种设备上运行:HoloLens 1、Hololens 2 和沉浸式 (VR) 耳机。根据您运行应用程序的设备类型,某些行为可能会有所不同。我如何询问 SDK 我的应用程序当前在哪种设备上运行?
问问题
761 次
3 回答
6
如果您使用 MRTK(我注意到您可能基于您的标签),那么最好的方法是使用平台功能实用程序,因为这将在新设备出现时跨平台工作。例如,您可以检查“我的设备是否支持铰接手?”,而不是检查“在 HoloLens 2 上开启”。然后,这将在支持关节手的其他平台上工作。例如,请查看MixedRealityToolkit.Examples/Demos/Utilities/Scenes/MixedRealityCapabilityDemo.unity
MRTK 示例。
如果您现在需要一个临时解决方案来区分 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 回答