Подкласс DownloadHandler, специализирующийся на загрузке изображений для использования в качестве объектов Texture.
DownloadHandlerTexture хранит полученные данные в предварительно выделенной Unity Texture объекте. Он оптимизирован для загрузки изображений с веб-серверов, а декомпрессия и декодирование изображений выполняются в рабочем потоке.
Этот обработчик загрузки хранит полученные данные в буфере и по завершении загрузки декодирует данные в действительные Unity Texture Если текстура уничтожена, ее можно создать заново с помощью того же DownloadHandlerTexture объект.
Обработчик выполняет буферизацию, декомпрессию и создание текстуры в собственном коде. Кроме того, декомпрессия и создание текстуры выполняются на рабочем потоке вместо главного потока, что может улучшить время кадров при загрузке больших текстур.
DownloadHandlerTexture выделяет управляемую память только при окончательном создании самой Текстуры, что устраняет накладные расходы на сбор мусора, связанные с выполнением преобразования байтов в текстуру в скрипте.
Если вам нужно загрузить изображение по HTTP и использовать его как текстуру в Unity, настоятельно рекомендуется применять именно этот класс.
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using System.Collections;
[RequireComponent(typeof(Image))]
public class ImageDownloader : MonoBehaviour {
Image _img;
void Start () {
_img = GetComponent<UnityEngine.UI.Image>();
Download("https://www.mysite.com/myimage.png");
}
public void Download(string url) {
StartCoroutine(LoadFromWeb(url));
}
IEnumerator LoadFromWeb(string url)
{
UnityWebRequest wr = new UnityWebRequest(url);
DownloadHandlerTexture texDl = new DownloadHandlerTexture(true);
wr.downloadHandler = texDl;
yield return wr.SendWebRequest();
if (wr.result == UnityWebRequest.Result.Success) {
Texture2D t = texDl.texture;
Sprite s = Sprite.Create(t, new Rect(0, 0, t.width, t.height),
Vector2.zero, 1f);
_img.sprite = s;
}
}
}