Могу ли я загружать данные в фоновом режиме, пока открыт заставка Unity? Если так, то как?
Я пытаюсь запустить код во время заставки, а не просто загружать ресурсы.
Я не смог найти какую-либо информацию об этом в Google или в документации Unity .
Могу ли я загружать данные в фоновом режиме, пока открыт заставка Unity? Если так, то как?
Я пытаюсь запустить код во время заставки, а не просто загружать ресурсы.
Я не смог найти какую-либо информацию об этом в Google или в документации Unity .
Ответы:
Я только что провел несколько тестов и обнаружил, что конструктор для объектов в первой сцене действительно вызывается, пока отображается заставка.
Вот некоторые моменты, которые я измерил с помощью статического секундомера:
Constructed 0 s
Awake 2.118 s
OnEnable 2.12 s
Start 2.744 s
First Update 2.919 s
Таким образом, похоже, что мы можем запустить скрипт за 3 секунды до конца заставки (с настройками по умолчанию), запустив его из конструктора. Вы можете попробовать запустить ваш код загрузки (возможно, в своем собственном потоке) оттуда.
Просто знайте, что это, вероятно, вызывается из потока загрузки, так как мы не в основном потоке, мы будем немного более ограничены тем, что нам разрешено делать здесь. Если вы пытаетесь сделать какую-то конкретную вещь, которая не поддерживается в ветке загрузки, рассмотрите возможность размещения нового вопроса с подробной информацией о вашем приложении, и мы можем попытаться найти обходной путь для этого случая.
Update()
тик через 2,9 секунды после запуска конструктора. Это все, что я могу различить с помощью современных приборов.
Лучше всего сделать собственный загрузочный экран и установить его в качестве начальной сцены. Затем из этой простой сцены используйте менеджер сцен, чтобы загрузить следующую сцену в фоновом режиме, асинхронно .
Я не могу найти информацию, чтобы подтвердить это, но из моих наблюдений кажется, что Unity загружает вашу начальную сцену во время показа заставки.
На некоторых платформах игра запускается до исчезновения заставки, если загрузка происходит достаточно быстро.
Все это может измениться в любое время, на любой платформе, при любом обновлении версии. Нет гарантии, что это будет согласованно, поэтому лучше использовать собственный экран загрузки.
Короткий ответ - нет , вы не можете этого сделать.
Оба приведенных выше ответа верны с точки зрения управления сценой. Вы можете использовать Scene Manager для загрузки сцены и, поскольку она асинхронная, вы можете запускать другой код параллельно.
Посмотрите документацию SceneManager.LoadScene для более подробной информации.
Самый быстрый способ запустить ваш код после запуска игры - запустить его из первой сцены с крошечным следом. Давайте назовем это Splash Scene . Единственное, что он будет содержать, это ваш заставочный образ и контроллер, выполняющий необходимый код и загружающий другую сцену.
Поскольку он занимает мало места, он загружается очень быстро и, таким образом, ваш код запускается практически мгновенно. Затем вы можете делать то, что вам нужно, и потом загружать Other Scene .
Другая вещь, которую вы можете попробовать, это удалить "заставку", удалить любые изображения, которые вы хотели бы показать там. Это будет немного быстрее, так как изначально он не будет загружен.
Так что поток будет примерно таким:
Чем меньше сцена, тем быстрее она будет загружаться. Вы можете использовать что-то вроде контроллера всплеска, прикрепленного к любому объекту на загруженном экране заставки .
using UnityEngine;
using UnityEngine.SceneManagement;
public class SplashController: MonoBehaviour
{
void Start()
{
// RunSomeSyncMethod();
SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);
}
}