Сегодня нашел очень злой баг в юнити…
Assertion failed on expression: ‘m_InstanceID != InstanceID_None’
UnityEngine.Networking.DownloadHandlerTexture:get_texture()
Assets.Scripts.UI.Utils.<StartLoad>c__Iterator0:MoveNext() (at Assets/Scripts/UI/Utils/ImageLoader.cs:43)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
В общем DownloadHandlerTexture:get_texture — по мануалу должно вернуть текстуру или null, если юнити не смог воссоздать текстуру из полученных данных ИЛИ!!! если не успел распаковать картинку. Так вот в версии 5.4.4p3 юнити просто крашилась на попытке достать текстуру. Я заслал баг-репорт, на что получил ответ, что в 5,5 все уже починили…
Но оказалось они просто обернули это в try/catch, а баг по прежнему есть… В итоге выливается это в то, что даже имея в буфере валидные данные, юнити не отдаст по этому геттеру текстуру, даже если дергать его в цикле с тайматуом… пришлось сделать вот так вот:
var dh = (DownloadHandlerTexture) _request.downloadHandler; var texture = dh.texture; // bug workaround, when unity can't create texture even has correct data inside DownloadHandlerTexture // ----- BEGIN ------ var tryCounter = 1; const int maxTryCount = 10; while (texture == null && tryCounter < maxTryCount) { Debug.LogWarningFormat("Received texture is null for url = {0}", _lastTriedUrl); yield return new WaitForSeconds(0.2f); texture = dh.texture; ++tryCounter; } if (texture == null && dh.data != null && dh.data.Length > 0) { var t2D = new Texture2D(3,3); t2D.LoadImage(dh.data); texture = t2D; } // ----- END ------