длинная загрузка после splash Image - Unity

201
17 января 2018, 14:01

Android. При старте показываю логотип на белом фоне, 2 секунды, а дальше наблюдается белый экран 4 секунды, и запускается сцена, проверял в пустой сцене, запускается сразу после логотипа игра, слышал как-то запускают пустую сцену а дальше загружают сцену игры или асинхронно загружать в момент показа логотипа, подскажите как это сделать лучше, если можно объясните как это реализовать

Answer 1

Ваш вопрос очень общий и смешивает несколько независимых подходов, которые решают разные задачи.

То что описываете вы, обычно, используется для загрузки внешних ресурсов. В случае с мобильными платформами это практически всегда AssetBundle, скачиваемый с удалённого сервера.

В вашем случае проблема в длительности загрузки самой сцены. Предполагаю, что все ресурсы у вас под рукой. Вы не предоставили никакой информации, и сложно оценить насколько сцена валидна. Возможно, она до предела перегружена объектами или использует нехорошие скрипты, тормозящие загрузку.

Но так или иначе, загрузку сцены можно сделать асинхронной. Для этого служит метод SceneManager.LoadSceneAsync.

По ссылке же находится пример, демонстрирующий корутину с примером использования.

using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Example : MonoBehaviour
{
    void Update()
    {
        //Press the space key to start coroutine
        if (Input.GetKey(KeyCode.Space))
        {
            //Use a coroutine to load the Scene in the background
            StartCoroutine(LoadYourAsyncScene());
        }
    }
    IEnumerator LoadYourAsyncScene()
    {
        // The Application loads the Scene in the background at the same time as the current Scene.
        //This is particularly good for creating loading screens. You could also load the Scene by build //number.
        AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("Scene2");
        //Wait until the last operation fully loads to return anything
        while (!asyncLoad.isDone)
        {
            yield return null;
        }
    }
}

Экземпляр AsyncOperation содержит свойство progress, которое позволяет отражать процедуру загрузки в различных ProgressBar'ах.

Вы можете реализовать любую анимацию или просто крутящуюся картинку на чёрном фоне, которая будет висеть перед глазами игрока до окончания загрузки сцены. Тоже самое касается и прочих асинхронных операций.

Обрати внимание, что ожидание завершения операции while (!asyncLoad.isDone) должно выполняться итеративно в отдельной корутине, порождённой методом StartCoroutine

READ ALSO
Ввод тега в текстовое поле

Ввод тега в текстовое поле

ЗдравствуйтеЕсть проблема с вводом данных в текстовые поля

207
Свойство зависимости из UserControl в MainWindow

Свойство зависимости из UserControl в MainWindow

Не работает свойство зависимости

206
Хранение настроек c# в AppData папке

Хранение настроек c# в AppData папке

Доброго вечераПрошу помочь разобраться почему следующий код не сохраняет измененные настройки в test

253
Azure доступ к FileStorage из WebApplication Service

Azure доступ к FileStorage из WebApplication Service

Приветствую ! Столкнулся со следующей проблемой, необходимо иметь возможность загрузки файлов в FileStorage из WebApplication Service с помощью VirtualNetwork...

190