Всем привет. Пытаюсь сделать асинхронную загрузку сцены с задержкой переключения на нее. То есть сцена должна загрузиться, но переключиться на нее по команде. Пока что есть такое :
public class SceneLoaderService : MonoBehaviour
{
private AsyncOperation _asyncLoad;
public event Action<float> ChangeProgressEvent;
public event Action CompletedLoadSceneEvent;
// Выполняется из другого скрипта после того как будут выполнены другие асинхронные операции
// (Пока что данный метод нигде не вызывается !)
public void LoadNow()
{
_asyncLoad.allowSceneActivation = true;
}
// Вызывается на Awake в другом скрипте с еще несколькими асинхронными операциями
public void AsyncLoadScene(int index)
{
StartCoroutine(LoadSceneCoroutine(index));
}
public void LoadScene(int index)
{
SceneManager.LoadScene(index);
}
private IEnumerator LoadSceneCoroutine(int index)
{
_asyncLoad = SceneManager.LoadSceneAsync(index);
// Отключаем возможность автоматического перехода на новую сцену
// (Но так не работает, сцена все равно запускается)
_asyncLoad.allowSceneActivation = false;
// Проходит один раз по циклу не заходя во внутренний if
// (Второго прохода по циклу нет, где-то здесь запускается сцена)
while (!_asyncLoad.isDone)
{
ChangeProgressEvent?.Invoke(_asyncLoad.progress);
// Сюда не заходит
if (_asyncLoad.progress >= 0.9f)
{
CompletedLoadSceneEvent?.Invoke();
yield break;
}
yield return null;
}
}
}