Application.backgroundLoadingPriority
Declaration
public static ThreadPriority backgroundLoadingPriority;Описание
Приоритет потока фоновой загрузки.
Позволяет контролировать время, необходимое для асинхронной загрузки данных, и влияние на производительность игры при загрузке в фоновом режиме.
Примечание: Эта настройка не влияет на Редактор; она применяется только в встроенном Проигрывателе.
Асинхронные функции загрузки, загружающие объекты (Resources.LoadAsync, AssetBundle.LoadAssetAsync, AssetBundle.LoadAllAssetAsync), сцены (SceneManager.LoadSceneAsync) выполнять чтение данных и десерриализацию на отдельном потоке фоновой загрузки и интеграцию объектов на главном потоке.
Интеграция зависит от типа объекта и для текстур, меши означают загрузку данных в GPU, аудиоклипы готовят данные для воспроизведения.
Чтобы избежать ика мы ограничиваем интеграция время на основной поток в зависимости от backgroundLoadingPriority значение:
- ThreadPriority.Low - 2 мс
- ThreadPriority.BelowNormal - 4 мс
- ThreadPriority.Normal - 10 мс
- ThreadPriority.High - 50 мс
Это значение определяет максимальное время, которое все асинхронные операции могут потратить в одном кадре на основном потоке.
Значение по умолчанию ThreadPriority.BelowNormal, однако некоторые платформы переопределяют его:
- Универсальная Windows платформа — ThreadPriority.High
- Консоли — ThreadPriority.Normal
Поток фоновой загрузки непосредственно использует backgroundLoadingPriority. Значение этого свойства передаётся операционной системе в качестве приоритета планирования потока без преобразования или косвенного обращения.
Маркер Profiler Application.Integrate Assets in Background позволяет оптимизировать фоновую загрузку.
using UnityEngine;
public class ExampleScript : MonoBehaviour { void Example1() { // Load as much data as possible, as a result frame rate will drop. // Good for fast loading when showing progress bars.
Application.backgroundLoadingPriority = ThreadPriority.High; }
void Example2() { // Load data very slowly and try not to affect performance of the game. // Good for loading in the background while the game is playing.
Application.backgroundLoadingPriority = ThreadPriority.Low; } }
Дополнительные ресурсы: ThreadPriority enum, AsyncOperation.priority.