Изменить графический API во время выполнения (Unity) - PullRequest
0 голосов
/ 18 февраля 2019

В настоящее время я пытаюсь использовать два разных алгоритма 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 голосов
/ 18 февраля 2019

Насколько я знаю, PlayerSettings.SetGraphicsAPIs не работает во время выполнения.Это только для UnityEditor.Я думаю, что вы должны собрать отдельно для ARCore и EasyAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...