Я загружаю Assetbundles, используя метод UnitywebRequest из HTTPS, однако UnityWebRequest.SendWebRequest, похоже, не торопится, чтобы фактически начать получать какие-либо данные.
public static IEnumerator DownloadMenuAssetBundle(string fileName)
{
string path = Path.Combine(Globals.Platform, fileName);
UnityWebRequest www = new UnityWebRequest(FileManager.RequestFile(path));//this returns the complete url to the bundle e.g https://mywebsite.com/unity/myBundle
www.downloadHandler = new DownloadHandlerBuffer();
www.SendWebRequest();
while (!www.isDone)
{
Debug.Log("response: " + www.responseCode);
if (www.isNetworkError)
{
Debug.Log(www.error);
}
Debug.Log("downloaded:" + www.downloadedBytes);
yield return null;
}
Debug.Log("downloaded bytes: " + www.downloadedBytes);
Debug.Log("final response:" + www.responseCode);
if (www.error != null)
{
Debug.LogError("Encountered error while downloading: <color=blue>" + fileName + "</color>: " + www.error);
}
else
{
//rest of the logic, this works
}
Debug.Log("response: " + www.downloadedBytes);
вернет 0
в течение случайного промежутка времени (иногда от нескольких до пары минут). Но www. isNetworkError
никогда не попадает, и как только байты начнут поступать, он загрузит все это за пару миллисекунд.
Раньше я использовал точно такой же скрипт на http-сервере, и он работал безупречно без каких-либо задержек, но как только я переключился на https, это заняло некоторое время. Задержка также не происходит в редакторе (версия среды выполнения Unity 2017.2.1f1, версия .net 3.5 с совместимостью с подмножеством API 2.0), но происходит на всех моих мобильных устройствах (Oneplus 3, samsung galaxy s8, samsung galaxy s6).
Сначала www.responseCode
вернул 301 Moved Permanently
, я решил это, используя новый URL-адрес https вместо URL-адреса http, надеясь, что это исправит это. Однако этого не произошло, и теперь я получаю только 200 OK
.
Это также непоследовательная проблема, потому что время, которое требуется, никогда не бывает одинаковым, и это даже не происходит все время (но происходит в большинстве случаев).
Может ли это быть проблемой из-за того, что уровню безопасности требуется дополнительное время, или серверу требуется время для ответа? если это проблема, как я могу отследить это (хотя я сомневаюсь, что это хорошо работает в редакторе)?
РЕДАКТИРОВАТЬ: обходной путь Я решил проблему, используя класс WWW
вместо UnityWebRequest
. задержка полностью исчезла, но проверка SSL-сертификата не выполняется, поскольку Unity, похоже, отклоняет их по умолчанию. Я бы не назвал это исправлением, но пока работает.
if (www.isNetworkError)
из циклаwhile
. Вы должны делать это только после завершения цикла и вне его. Если есть ошибка, цикл должен выйти сразу. - person Programmer   schedule 01.10.2018UnityWebRequest.certificateHandler
и посмотреть, что произойдет. Это показывает, как проверить сертификат. Вы также можете проверить мой другой, который также является решением для замедленияUnityWebRequest
на Android с помощьюWebRequest
- person Programmer   schedule 06.10.2018