J’ai récemment travaillé dans le développement d’un plugin Unity. Où il était nécessaire de charger des images depuis une URL d’un serveur web. La solution est finalement plutôt simple et a l’avantage d’être asynchrone (cela n’impacte quasiment pas les performances).
Voilà donc le code qui en résulte:
public async Task<Texture2D> DownloadImage(string url, Action<Texture2D> callback)
{
UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
www.SendWebRequest();
while (!www.isDone)
{
await Task.Yield();
}
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(www.error);
return null;
}
else
{
Texture2D texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
callback(texture);
return texture;
}
}
Et voilà !