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, но при этом тип у объектов одинаковый.
4 комментария