Не могу загрузить сцену EasyAr с помощью LoadSceneAsync - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь загрузить сцену с EasyAR асинхронно по сценарию b. Но это не работает.

SceneManager.LoadSceneAsync("Scene_name")

Это работает, если я пытаюсь загрузить сцену, используя

SceneManager.LoadScene("Scene_name")

Вопрос: есть ли способ загрузить его асинхронно?

Работа с c #.
Тест на устройстве Android.
Unity 2018.3.12f
Easy AR ver. 3.0


Спасибо!

Новое обновление кода:

  private void WallSceneLoader()
    {
        _loaderGameObject.SetActive(true);
        var asyncScene = SceneManager.LoadSceneAsync(Constants.Scenes.AR_SCENE);
        asyncScene.allowSceneActivation = false;

        while (asyncScene.progress < 0.9f)
        {
            var progress = Mathf.Clamp01(asyncScene.progress / 0.9f);
            _loaderBar.value = progress;
        }

        Debug.Log("asyncScene.isDone = true");
        asyncScene.allowSceneActivation = true;}

_loader.gameObject это просто слайдер с индикатором хода.

1 Ответ

1 голос
/ 12 ноября 2019

Используя этот цикл while в «обычном» методе, вы все равно блокируете поток, так что вы теряете все преимущества асинхронности здесь.


Что вы скорее хотите сделать, это использовать его в Сопрограмма , как это на самом деле также показано в примере для SceneManager.LoadSceneAsync

private IEnumerator WallSceneLoader()
{
    _loaderGameObject.SetActive(true);
    var asyncScene = SceneManager.LoadSceneAsync(Constants.Scenes.AR_SCENE);
    asyncScene.allowSceneActivation = false;

    while (asyncScene.progress < 0.9f)
    {
        var progress = Mathf.Clamp01(asyncScene.progress / 0.9f);
        _loaderBar.value = progress;

        // tells Unity to pause the routine here
        // render the frame and continue from here in the next frame
        yield return null;
    }

    Debug.Log("asyncScene.isDone = true");
    asyncScene.allowSceneActivation = true;
}

И затем используйте StartCoroutine, где выхочу назвать это

StartCoroutine(WalSceneLoader());
...