Представим типичную ситуацию при работе с ассетами: у вас куча ассетов с одним и тем же лейблом и вы хотите их загрузить разом. А ассеты могут быть разного типа, поэтому в дженерик вы передаёте тип Object
Что же происходит в этом случае с картинками? Загрузятся они как спрайты? Или как текстуры? Что ж…
Добавим в проект картинку и навесим Label.
Теперь попробуем загрузить её по имени лейбла.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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}]"); }; } }; } } |
Увидим такой лог:
1 2 |
LoadByLabel: Dolan => UnityEngine.Texture2D, UnityEngine.Texture2D] LoadByLabel: Dolan => UnityEngine.Sprite, UnityEngine.Texture2D] |
Во-первых, одна и та же картинка загрузилась два раза.
Но проблема тут в том, что оба объекта имеют разный ResourceType, но при этом тип у объектов одинаковый.