Когда я сделал аватарки игроков для таблицы лидеров по уроку от Яндекса, у меня получились супер "мыльные" изображения. Мыльными они были не во всех разрешениях игры, а только на некоторых. То есть я запускаю игру в 1920х1080, и всё ок, а потом заливаю в Яндекс Игры, где размер области с игрой 1632х899 и качество становится сильно хуже.
Как я понял, это связано с тем, что для текстуры создаются Mip Map'ы, так как видимо метод
UnityWebRequestTexture.GetTexture(url) был предназначен в первую очередь для загрузки текстур, а не спрайтов.Соответственно, нам нужно взять RawData из загруженной текстуры, и создать другую текстуру, с необходимыми нам настройками (в примере я отключил создание Mip Maps):
[SerializeField] private RawImage bad;
[SerializeField] private RawImage good;
private IEnumerator Download(string url)
{
var request = UnityWebRequestTexture.GetTexture(url);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
var downloaded = DownloadHandlerTexture.GetContent(request);
var converted = new Texture2D(downloaded.width, downloaded.height, downloaded.format, false);
converted.LoadRawTextureData(downloaded.GetRawTextureData());
converted.Apply(false, true);
bad.texture = downloaded;
good.texture = converted;
}
}
UPD: изначально у меня был пример с созданием Sprite из Texture2D, но, как верно заметили в комментариях, это не обязательно, можно воспользоваться
RawImage. Сути проблемы это не меняет, всё равно нужно конвертировать текстуру. Изначальный пример оставил в комментариях.#тайные_знания #ui #веб_игры
