Unity3D / C # - Асинхронная загрузка активов и уровней вызывает framedrop - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь загрузить уровень с несколькими большими ресурсами в Unity 3D, и я не могу избавиться от заиканий и отставаний во время загрузки контента.

Я разделил свою главную сцену на отдельные подуровни и загружаю их асинхронно.

Итак, сначала я пытаюсь предварительно загрузить реальные ресурсы из папки ресурсов:

private IEnumerator preLoadAsset(string assetPath)
{
    ResourceRequest asyncLoad = Resources.LoadAsync(assetPath);
    yield return asyncLoad;
    asyncLoadedAssetsCount += 1;
    preloadSceneAssets();
}

Этот этап быстро завершается с минимальным влиянием на производительность.

private IEnumerator LoadYourAsyncScene(string sceneName)
{
    AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
    asyncLoad.allowSceneActivation = true;
    yield return asyncLoad;
    asyncLoadedScenesCount += 1;
    loadAdditiveScenes();
}

Большинство задержек происходит здесь, независимо от того, установил ли я активацию сцены на true или false.

Я также установил приоритет фоновой загрузки приложения на Низкий ранее в сценарии:

 Application.backgroundLoadingPriority = ThreadPriority.Low; 

Что я делаю не так? Помогает ли даже предварительная загрузка ресурсов перед загрузкой аддитивной сцены сверху, и если нет, то как я могу эффективно использовать предварительную загрузку ресурсов в память?

Примечание: аддитивные сцены пусты, за исключением одного большого актива в каждом из них, и функции Start / OnEnable / Awake не выполняются

1 Ответ

0 голосов
/ 02 августа 2019

Асинхронная загрузка сцены работает только на этапе загрузки ресурса с жесткого диска. Далее идет Merge Prefabs, именно он создает эту проблему.

Источник: данные профилировщика

Решение: Создание префабов вручную с помощью GameObject.Instantiate

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