Загрузить атласы спрайтов вручную во время выполнения
Чтобы избежать загрузки Unity атласов спрайтов и присоединения их к вашим спрайтам при запуске проекта, загрузите атлас спрайтов во время выполнения. Это называется поздней связью.
Например, загрузите вариант атласа спрайтов с более низким разрешением в зависимости от оборудования, или загрузите набор спрайтов в память только тогда, когда это необходимо для более позднего уровня игры.
Примечание: Чтобы получить список спрайтов, упакованных в атлас спрайтов, например, если вам нужно вручную инстанционировать спрайты во время выполнения, используйте метод GetSprites из SpriteAtlas API. Для более подробной информации, см. SpriteAtlas.GetSprites.
Исключить атлас спрайтов из сборки
Чтобы предотвратить автоматическое включение Unity атласа спрайтов в сборку, выполните следующие действия:
- В окне Project выберите атлас спиритов.
- В окне Inspector отключите Включить в сборку.
Важно: По умолчанию это не влияет на представления Scene и Game, так как они продолжают ссылаться на файл .spriteatlasv2 в окне Project. Однако, если вы переходите в режим воспроизведения или создаете свой проект, спрайты исчезают, так как теперь они ссылаются на отсутствующий атлас спрайтов в сборке.
Загрузить атлас спрайтов во время выполнения
Когда вы отключаете Включить в сборку, ваши спрайты все еще ссылаются на атлас спрайтов при запуске проекта, но текстура атласа спрайтов отсутствует. Вы должны вручную привязать атлас спрайтов, когда спрайты запросят его.
Используйте один из следующих методов:
- Загрузить атлас спрайтов из Система ресурсов и загрузить его с
Resources.LoadAPI. - Загрузить атлас спрайтов из AssetBundle и загрузить его с
AssetBundleAPI.
Загрузить атлас спрайтов из системы ресурсов
Выполните следующие действия:
В течение Project окно, создать папку с названием Ресурсы.
Переместить ассет атласа спрайта в Ресурсы папка. Unity автоматически включает ассеты из Ресурсы папку в сборке, но не загружает их.
-
В скрипте C# добавьте новый метод к обратному вызовам
SpriteAtlasManager.atlasRequested. Обратный вызовatlasRequestedзапускается, когда спрайт запрашивает разгруженный атлас спрайтов. Например:void OnEnable() { SpriteAtlasManager.atlasRequested += MySpriteAtlasLoader; } -
В методе используйте
Resources.LoadAPI чтобы загрузить атлас спрайтов из Ресурсы папку и передать его обратно в Unity. Например:// Unity passes in the name of the sprite atlas that the sprite is requesting, and a callback to call void MySpriteAtlasLoader(string spriteAtlasName, System.Action<SpriteAtlas> callback) { // Load the sprite atlas var spriteAtlas = UnityEngine.Resources.Load<SpriteAtlas>(spriteAtlasName); // Pass the sprite atlas back to Unity callback(spriteAtlas); }
Дополнительные сведения см. в Использование системы ресурсов для загрузки ассетов во время выполнения.
Полный пример см. в примерах Sprite Atlas в пакете 2D Common. Более подробную информацию об примерах пакетов см. в Окно Package Manager.
Загрузить атлас спрайтов из AssetBundle
Выполните следующие действия:
-
Назначьте атлас спрайтов AssetBundle. Дополнительные сведения см. в Назначение ассетов AssetBundle.
Важно: Чтобы избежать дублирования спрайтов в вашем проекте, назначайте спрайты одному и тому же AssetBundle. Дополнительную информацию см. в Предотвращение дублирования активов.
Примечание: Если вы назначаете атлас спрайта AssetBundle но позволяют Включить в сборку, вам не нужно загружать атлас спрайтов во время выполнения. Unity загружает атлас спрайтов автоматически.
-
В скрипте C# добавьте новый метод к обратному вызовам
SpriteAtlasManager.atlasRequested. Обратный вызовatlasRequestedзапускается, когда спрайт запрашивает разгруженный атлас спрайтов. Например:void OnEnable() { SpriteAtlasManager.atlasRequested += MySpriteAtlasLoader; } -
В методе используйте
AssetBundleAPI для загрузки атласа спрайтов из AssetBundle и передачи его обратно в Unity. Например:// Unity passes in the name of the sprite atlas that the sprite is requesting, and a callback to call void MySpriteAtlasLoader(string spriteAtlasName, System.Action<SpriteAtlas> callback) { // Load the sprite atlas from the AssetBundle var bundle = AssetBundle.LoadFromFile("path/to/assetbundle"); var spriteAtlas = bundle.LoadAsset<SpriteAtlas>(spriteAtlasName); // Pass the sprite atlas back to Unity callback(spriteAtlas); }
Дополнительные сведения см. в Загрузка ресурсов из AssetBundles.
Полный пример см. в примерах Sprite Atlas в пакете 2D Common. Более подробную информацию об примерах пакетов см. в Окно Package Manager.