在运行时更改图形API(Unity)

时间:2019-02-18 08:36:51

标签: c# unity3d

我目前正在尝试同时使用两种不同的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”在当前上下文中不存在” 。我可以尝试其他替代方法吗?

1 个答案:

答案 0 :(得分:1)

据我所知,PlayerSettings.SetGraphicsAPIs在运行时不起作用。 它仅适用于UnityEditor。 我认为您应该分别为ARCore和EasyAR进行构建。