2016-09-22 5 views
1

Я получаю эту ошибку в Unity 5.4 при попытке загрузить текстуру с сервера.Ошибка m_InstanceID! = 0 при загрузке текстуры с сервера

Вот код (ссылка должна работать):

 UnityWebRequest www = UnityWebRequest.GetTexture("https://0.gravatar.com/avatar/fc2beef90fad49f83d79650a10b5c030?s=256&d=identicon&r=G"); 
    www.SetRequestHeader("Accept", "image/*"); 
    async = www.Send(); 
    while (!async.isDone) 
     yield return null; 
    if (www.isError) { 
     Debug.Log(www.error); 
    } else { 
     tex = DownloadHandlerTexture.GetContent(www); // <------------------- 
    } 

ошибка выглядит следующим образом:

m_InstanceID != 0 
UnityEngine.Networking.DownloadHandlerTexture:GetContent(UnityWebRequest) 

ответ

1

Это ошибка. Это происходит, когда www.isDone или async.isDone используется с DownloadHandlerTexture.

Перед тем как позвонить DownloadHandlerTexture.GetContent(www);, необходимо подождать еще один кадр с yield return null; или yield return new WaitForEndOfFrame().

UnityWebRequest www = UnityWebRequest.GetTexture("https://0.gravatar.com/avatar/fc2beef90fad49f83d79650a10b5c030?s=256&d=identicon&r=G"); 
www.SetRequestHeader("Accept", "image/*"); 
async = www.Send(); 
while (!async.isDone) 
    yield return null; 
if (www.isError) 
{ 
    Debug.Log(www.error); 
} 
else 
{ 
    //yield return null; // This<------------------- 
    yield return new WaitForEndOfFrame(); // OR This<------------------- 
    tex = DownloadHandlerTexture.GetContent(www); 
} 

Хотя, я не знаю, насколько это надежно. Я не использовал бы это в коммерческом продукте, если не будет проведен тщательный тест.

Надежное решение заключается в файле для ошибки около www.isDone, затем не используйте www.isDone. Используйте yield return www.Send();, пока это не будет исправлено.

UnityWebRequest www = UnityWebRequest.GetTexture("https://0.gravatar.com/avatar/fc2beef90fad49f83d79650a10b5c030?s=256&d=identicon&r=G"); 
www.SetRequestHeader("Accept", "image/*"); 
yield return www.Send(); // This<------------------- 

if (www.isError) 
{ 
    Debug.Log(www.error); 
} 
else 
{ 
    tex = DownloadHandlerTexture.GetContent(www);  
} 
+0

Вы попробовали решение? Я использую один и тот же шаблон для чтения некоторых json-данных, и он работает просто отлично - так что он ломается только при загрузке текстуры? Я попробую вам решение и сообщит позже сегодня вечером – serge

+0

Я не думаю, что вы читали ответ. «Это происходит, когда www.isDone или async.isDone используется с DownloadHandlerTexture». Это происходит с текстурой, но не с текстовыми данными. Проблема в том, что 'isError' сообщает, что закончил, когда не закончил. Было бы неплохо комментировать только после того, как мы попытаемся ответить на вопрос, чтобы спасти нас обоих. – Programmer

+0

Я понял ответ, я просто удивлен, что он только ломается на DownloadHandlerTexture. – serge