Я попытался преобразовать его в байты, редактируя эту функцию, а не передавая ее www.text и получив поврежденную ошибку изображения
blockquote>Вероятно, это причина 90 % вашей проблемы.
WWW.text
используется для не двоичных данных, таких как простой текст.1. Загружать изображения или файлы с помощью
WWW.bytes
неWWW.text
.2. Сохранять изображение с помощью
File.WriteAllBytes
.3. Прочитайте изображение с
File.ReadAllBytes
.4. Загрузите изображение в текстуру с помощью
Texture2D.LoadImage(yourImageByteArray);
5. Ваш путь должен быть
Application.persistentDataPath/yourfolderName/thenFileName
, если вы хотите, чтобы это было совместимо с каждой платформой. Он не должен бытьApplication.persistentDataPath/yourFileName
илиApplication.dataPath
.6. Наконец, используйте
Debug.Log
, чтобы узнать, что происходит в вашем коде. Вы должны или, по крайней мере, использовать отладчик. Вы должны точно знать, где находится ваш код.Вам все равно нужно выполнить некоторые проверки ошибок.
public void downloadImage(string url, string pathToSaveImage) { WWW www = new WWW(url); StartCoroutine(_downloadImage(www, pathToSaveImage)); } private IEnumerator _downloadImage(WWW www, string savePath) { yield return www; //Check if we failed to send if (string.IsNullOrEmpty(www.error)) { UnityEngine.Debug.Log("Success"); //Save Image saveImage(savePath, www.bytes); } else { UnityEngine.Debug.Log("Error: " + www.error); } } void saveImage(string path, byte[] imageBytes) { //Create Directory if it does not exist if (!Directory.Exists(Path.GetDirectoryName(path))) { Directory.CreateDirectory(Path.GetDirectoryName(path)); } try { File.WriteAllBytes(path, imageBytes); Debug.Log("Saved Data to: " + path.Replace("/", "\\")); } catch (Exception e) { Debug.LogWarning("Failed To Save Data to: " + path.Replace("/", "\\")); Debug.LogWarning("Error: " + e.Message); } } byte[] loadImage(string path) { byte[] dataByte = null; //Exit if Directory or File does not exist if (!Directory.Exists(Path.GetDirectoryName(path))) { Debug.LogWarning("Directory does not exist"); return null; } if (!File.Exists(path)) { Debug.Log("File does not exist"); return null; } try { dataByte = File.ReadAllBytes(path); Debug.Log("Loaded Data from: " + path.Replace("/", "\\")); } catch (Exception e) { Debug.LogWarning("Failed To Load Data from: " + path.Replace("/", "\\")); Debug.LogWarning("Error: " + e.Message); } return dataByte; }
Использование:
Подготовьте url для загрузки изображения и сохранения в:
//File url string url = "http://www.wallpapereast.com/static/images/Cool-Wallpaper-11C4.jpg"; //Save Path string savePath = Path.Combine(Application.persistentDataPath, "data"); savePath = Path.Combine(savePath, "Images"); savePath = Path.Combine(savePath, "logo");
Как вы можете видеть, нет необходимости добавлять расширение изображения ( png , jpg ) в savePath , и вы не должны добавлять расширение изображения в путь сохранения. Это облегчит загрузку позже, если вы не знаете расширение. Он должен работать до тех пор, пока изображение представляет собой формат изображения png или jpg .
Загружаемый файл:
downloadImage(url, savePath);
Загрузить изображение из файла:
byte[] imageBytes = loadImage(savePath);
Поместить изображение в Texture2D:
Texture2D texture; texture = new Texture2D(2, 2); texture.LoadImage(imageBytes);