RawImage
не имеет sprite
, но предполагает Texture
.
Вы не можете просто передать URL. Вы должны загрузить текстуру и затем применить результат к rawImage.texture
. Пример из документации:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class MyBehaviour : MonoBehaviour
{
void Start()
{
StartCoroutine(GetTexture());
}
IEnumerator GetTexture()
{
UnityWebRequest www = UnityWebRequestTexture.GetTexture("http://www.my-server.com/image.png");
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Texture myTexture = ((DownloadHandlerTexture)www.downloadHandler).texture;
}
}
}
Загрузка происходит асинхронно, поэтому префабы могут появиться до того, как будут загружены все изображения ... это зависит от вас, как вы хотите справиться с этим (например, отобразить анимацию загрузки или тем временем) - я предполагаю, что вы хотите создать экземпляр сразу.
Вы можете просто добавить обратный вызов в метод загрузки, чтобы выполнить любой метод в случае успеха или неудачи:
IEnumerator GetTexture(string url, Action successCallback, = null, Action errorCallback = null)
{
UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError)
{
errorCallback?.Invoke(www.error);
}
else
{
successCallback?.Invoke(((DownloadHandlerTexture)www.downloadHandler).texture);
}
}
и в своем коде добавить обратные вызовы, например. используя лямбда-выражений , которые должны быть выполнены при успехе или ошибке:
// ...
if (GetItems.getItems.itemsModel[i] != null)
{
// optional here add a loading or default texture
// to be displayed until texture is downloaded e.g.
newObj.transform.GetChild(2).GetComponent().texture = someDefaultTexture;
// start the download
StartCoroutine(GetTexture(
// The url
GetItems.getItems.itemsimage[i],
// executed on success
(s) =>
{
OnSuccess(newObj.transform.GetChild(2).GetComponent(), s);
},
// optional for visualizing download errors
(e) =>
{
OnError(e);
}
));
}
// ...
и, наконец, реализовать обратные вызовы, например:
// callback for success download
private void OnSuccess(RawImage rawImage, Texture texture)
{
rawImage.texture = texture;
}
// callback for download error
private void OnError(RawImage rawImage, string error)
{
rawImage.Texture = someErrorTexture;
Debug.Log(error, this);
}
Одно предупреждение о скачанном Текстуры (потому что в последнее время я тоже допустил эту ошибку):
Обычно неиспользуемые / не имеющие ссылок текстуры собирают / удаляют мусор, поэтому память вашего устройства не заполняется ... , но , по-видимому, текстуры созданные через UnityWebRequest
не уничтожаются, даже если у них больше нет ссылок.
Это может привести к утечкам памяти, заполняющим память вашего устройства загруженными текстурами!
Так что обязательно уничтожайте любую загруженную текстуру, когда она вам больше не нужна, например, добавив скрипт типа
public class CleanUpTexture : MonoBehaviour
{
private RawImage rawImage;
private void Awake()
{
rawImage = GetComponent();
}
private void OnDestroy()
{
if(!rawImage || rawImage.texture == null) return;
Destroy(rawImage.texture);
}
}
рядом с компонентом RawImage
, если эта текстура должна быть уничтожена вместе с объектом.
Это предполагает, конечно, что вы никогда не назначите такую же текстуру ни для чего другого. И это также предполагает, что вы никогда не назначите другую текстуру этому объекту (потому что вы 1. потеряете ссылку на загруженную текстуру и 2. возможно уничтожите текстуру, которую вы не хотели)
Вы могли использовать 10-кратную Перекрестную проверку для этого. Я полагаю, что это - довольно стандартный подход для оценки результатов деятельности алгоритма классификации.
Основная идея состоит в том, чтобы разделить Ваше приобретение знаний образцов на 10 подмножеств. Затем используйте одно подмножество для данных тестирования и других для данных поезда. Повторите это для каждого подмножества и вычислите среднюю производительность на конце.
Поскольку г-н Brownstone сказал, что 10-кратная Перекрестная проверка является, вероятно, лучшим способом пойти. Я недавно должен был оценить производительность многих различных классификаторов для этого, я использовал Weka. Который имеет API и загрузку инструментов, которые позволяют Вам легко проверять производительность большого количества различных классификаторов.