#multithreading #textures #unity-ui
Вопрос:
Я хотел бы загрузить кучу текстур из файлов .png и .jpg с моего диска и показать их с помощью RawImage на моем UnityUI. Но загрузка только одной из нужных мне текстур занимает слишком много времени. Поэтому я хотел передать его на аутсорсинг другому потоку. Я пытался это сделать, и здесь вы можете увидеть, как:
foreach(MediaData data in neueMedien)
{
GameObject bild = GameObject.Find(data.lastKnownPath " neu ");
Texture2D tex = new Texture2D(2, 2);
tex = await Task.Run(() =>
{
return TimeCalculator.gibTexture(data.lastKnownPath);
});
bild.GetComponent<RawImage>().texture = tex;
}
И это метод «gibTexture», который вызывается в другом потоке:
public static Texture2D gibTexture(string path)
{
if (File.Exists(path))
{
byte[] fileData = File.ReadAllBytes(path);
Texture2D tex = new Texture2D(2, 2);
tex.LoadImage(fileData);
return tex;
}
else return null;
}
Я использовал этот способ для загрузки текстур ранее, и он работает в основном потоке. Но я открыт для новых способов загрузки текстуры.
Теперь, если я попробую код выше, я получу следующее исключение:
Исключение UnityException: SupportsTextureFormatNative может быть вызван только из основного потока.
И далее в исключении он выделил строку «Texture2D tex = новый Texture2D(2, 2);» из «gibTexture» выше. Таким образом, мой способ загрузки текстуры невозможен в другом потоке, я прав? И если(я прав), как я могу это исправить?
О, и кстати: я попытался загрузить текстуру через UnityWebRequest и получил аналогичное исключение, в котором говорится, что я не могу вызывать методы UnityWebRequest ни в одном потоке, кроме основного потока.
Спасибо вам за вашу помощь 😀