我目前正在尝试同时使用两种不同的AR算法(ARCore和EasyAR)。 ARCore当前仅支持一小部分设备,因此我们希望EasyAR在ARCore不足时接管。
问题是,EasyAR需要OpenGL ES2,而ARCore需要OpenGL ES3。我编写了检查设备上是否存在ARCore的代码,然后导航到使用适当技术的场景。我还实现了unity的 PlayerSettings.SetGraphicsAPIs(),但这仅在Unity的编辑器中无法部署。现在,我正在寻找一种切实可行的替代方法。
该代码需要在android和IOS上运行。
public IEnumerator CheckCompatibility()
{
AsyncTask<ApkAvailabilityStatus> checkTask = Session.CheckApkAvailability();
CustomYieldInstruction customYield = checkTask.WaitForCompletion();
yield return customYield;
ApkAvailabilityStatus result = checkTask.Result;
switch (result)
{
case ApkAvailabilityStatus.SupportedApkTooOld:
_ShowAndroidToastMessage("Supported apk too old");
break;
case ApkAvailabilityStatus.SupportedInstalled:
_ShowAndroidToastMessage("Supported and installed");
GraphicsDeviceType[] easyAPI = { GraphicsDeviceType.OpenGLES2, GraphicsDeviceType.Vulkan };
SceneManager.LoadScene("ARCoreImageTracker");
break;
case ApkAvailabilityStatus.SupportedNotInstalled:
_ShowAndroidToastMessage("Supported, not installed, requesting installation");
Session.RequestApkInstallation(false);
break;
case ApkAvailabilityStatus.UnknownChecking:
_ShowAndroidToastMessage("Unknown Checking");
break;
case ApkAvailabilityStatus.UnknownError:
_ShowAndroidToastMessage("Unknown Error");
break;
case ApkAvailabilityStatus.UnknownTimedOut:
_ShowAndroidToastMessage("Unknown Timed out");
break;
case ApkAvailabilityStatus.UnsupportedDeviceNotCapable:
_ShowAndroidToastMessage("Unsupported Device Not Capable");
GraphicsDeviceType[] coreAPI = { GraphicsDeviceType.OpenGLES2 };
PlayerSettings.SetGraphicsAPIs(BuildTarget.Android, coreAPI);
SceneManager.LoadScene("EasyARImageTracker");
break;
}
}
当前,我得到一个错误列表,指出“名称“ PlayerSettings”在当前上下文中不存在” 。我可以尝试其他替代方法吗?
答案 0 :(得分:1)
据我所知,PlayerSettings.SetGraphicsAPIs在运行时不起作用。 它仅适用于UnityEditor。 我认为您应该分别为ARCore和EasyAR进行构建。