从服务器下载纹理时m_InstanceID != 0错误

本文关键字:InstanceID 错误 服务器 下载 纹理 | 更新日期: 2023-09-27 18:08:07

当尝试从服务器下载纹理时,我在Unity 5.4中得到这个错误。

下面是代码(链接应该可以工作):
     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)

从服务器下载纹理时m_InstanceID != 0错误

这是一个bug。当www.isDoneasync.isDoneDownloadHandlerTexture一起使用时,就会发生这种情况。

解决方法是在调用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的bug,然后不要使用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);    
}