Unity
Andrey Apanasik
382

Unity и Addressables: спрайт или текстура? Оба!

Представим типичную ситуацию при работе с ассетами: у вас куча ассетов с одним и тем же лейблом и вы хотите их загрузить разом. А ассеты могут быть разного типа, поэтому в дженерик вы передаёте тип Object. Что же происходит в этом случае с картинками? Загрузятся они как спрайты? Или как текстуры? Что ж…

В закладки

Добавим в проект картинку и навесим Label.

Теперь попробуем загрузить её по имени лейбла.

public class Tests : MonoBehaviour { void Start() { LoadByLabel<Object>("test"); } public void LoadByLabel<T>(string label) { Addressables.LoadResourceLocationsAsync(label).Completed += obj => { if (obj.Status != AsyncOperationStatus.Succeeded) return; if (obj.Result == null) return; foreach (var irl in obj.Result ) { AsyncOperationHandle loadHandle = Addressables.LoadAssetAsync<T>(irl.PrimaryKey); loadHandle.Completed += asset => { Debug.LogWarning($"LoadByLabel: {irl.PrimaryKey} => {irl.ResourceType}, {asset.Result.GetType().FullName}]"); }; } }; } }

Увидим такой лог:

LoadByLabel: Dolan => UnityEngine.Texture2D, UnityEngine.Texture2D] LoadByLabel: Dolan => UnityEngine.Sprite, UnityEngine.Texture2D]

Во-первых, одна и та же картинка загрузилась два раза.

Но проблема тут в том, что оба объекта имеют разный ResourceType, но при этом тип у объектов одинаковый.

Пишу про /gamedev (в частности, про /unity) и около него. Веду свой бложик, пишу что-то в дзене. - Твиттер.- Хабр.Всем добра (ノ◕ヮ◕)ノ*:・゚✧
{ "author_name": "Andrey Apanasik", "author_type": "self", "tags": ["unity"], "comments": 4, "likes": 9, "favorites": 7, "is_advertisement": false, "subsite_label": "unity", "id": 113361, "is_wide": false, "is_ugc": true, "date": "Mon, 16 Mar 2020 12:13:21 +0300", "is_special": false }
Объявление на DTF
0
4 комментария
Популярные
По порядку
1

Хоба!
Люблю дорогу на Эльдорадо)

Ответить
0

Подозреваю, что это даже в каком-то смысле правильное поведение. Мне кажется, что спрайт на самом деле является не ассетом, а просто рантайм контейнером для текстуры из-за чего и возникает эта проблема

Ответить
0

Время загрузки разное? А что по памяти?)

Ответить
0

Да в памяти то и спрайт, и текстура будут в любом случае. Но в зависимости от того, что грузишь, будет по-разному выглядеть очистка памяти.

Ответить

Прямой эфир

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }