UnityWebRequest.SendWebRequest не отправляется на мобильный
Я загружаю 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 version 2017.2.1f1 runtime версия.net 3.5 с совместимостью api 2.0 subset), но происходит на всех моих мобильных устройствах (Oneplus 3, samsung galaxy s8, samsung galaxy s6).
Вначале www.responseCode
вернул 301 Moved Permanently
Я решил это, используя новый URL-адрес https вместо http-URL, надеясь, что это исправит это. Однако это не так, и теперь я только получаю 200 OK
,
Это также противоречивая проблема, потому что время, которое это занимает, не всегда одинаково, и при этом оно не происходит даже постоянно (но происходит большую часть времени).
Может ли это быть проблемой из-за того, что уровень безопасности требует дополнительного времени или сервер не торопится с ответом? если это проблема, как я смогу отследить это (хотя я сомневаюсь, что это хорошо работает в редакторе)?
РЕДАКТИРОВАТЬ: обходной путь, я обошел проблему с помощью WWW
класс вместо UnityWebRequest
, задержка полностью исчезла, но проверка SSL-сертификата не выполняется, так как Unity, по-видимому, запрещает их по умолчанию. Я бы не стал называть это исправлением, но пока работает.
1 ответ
Всегда проблемы с UnityWebRequest
- иногда ничего не имеет смысла с UnityWebRequests...
Вы можете попробовать заменить
UnityWebRequest www = new UnityWebRequest(FileManager.RequestFile(path));
с
UnityWebRequest www = new UnityWebRequestAssetBundle(FileManager.RequestFile(path), 0);
Необязательно для тестирования:
Тоже думаю твой while
Цикл не "сохранить", чтобы поймать ошибку сети. Я бы предпочел следующее как указано в документации
UnityWebRequest www = new UnityWebRequestAssetBundle(FileManager.RequestFile(path);
yield return www.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
{
Debug.Log(www.error.ToString());
}
else
{
// for testing only // if yield return www.SendWebRequest(); is working as expected www.isDone = true here!
while (!www.isDone)
{
Debug.Log("Something is wrong! " + www.responseCode);
yield return new WaitForSeconds(0.1f);
}
// do whatever you want
}
Надеюсь это поможет.