Unity Download Проблема WWW и UnityWebRequest - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь загрузить комплект ресурсов, используя URL, следующий код, который я использую:

WWW www = new WWW(assetsFilepath);

while (!www.isDone)
{
    Debug.Log("Downloading asset: " + www.progress);
    yield return null;
}

yield return www;

if (www.error == null)               
{                    
    Debug.Log("No Error");
    string tempPath = Path.Combine(Application.persistentDataPath, assetsFilename);
    FileStream cache = new FileStream(path, FileMode.Create);
    cache.Write(www.bytes, 0, www.bytes.Length);
    cache.Close();
}                
else
{
    Debug.Log(www.error);
}

Log Output: Downloading asset: 0

Я знаю, что WWW-запрос устарел, поэтомуЯ попробовал следующее:

UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(assetsFilepath);

while (!www.isDone)
{
    Debug.Log("Downloading asset: " + www.downloadProgress);
    yield return null;
}

yield return www.SendWebRequest();
if (www.error == null)
{
    Debug.Log("No Error");
    string tempPath = Path.Combine(Application.persistentDataPath, assetsFilename);
    FileStream cache = new FileStream(path, FileMode.Create);
    cache.Write(www.downloadHandler.data, 0, www.downloadHandler.data.Length);
    cache.Close();
}
else
{
    Debug.Log(www.error);
}

Log Output : Downloading asset: 0

Unity: 2018.3.8f

Разрешения на запись в настройках проигрывателя: Внешняя SD-карта

ВнешняяРазрешения на чтение и запись предоставляются

Это первый раз, когда я использую UnityWebRequest, я не могу понять, почему я получаю это каждый раз. Я что-то пропустил? Или любая настройка?

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Вы ждете завершения загрузки, прежде чем начинать ее. Ваш код должен выглядеть следующим образом.

1) Создайте запрос: UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(assetsFilepath);

2)

  • Отправьте запрос и дождитесь его, используяодна строка: yield return www.SendWebRequest();

  • ИЛИ Отправьте его без дохода, если вы хотите отслеживать прогресс.

        www.SendWebRequest();
        while (!www.isDone)
        {
            Debug.Log(www.progress);
            yield return null;
        }
    

3) Сейчасвсе готово, дождитесь, пока обработчик загрузок завершит обработку данных:

while(!www.downloadHandler.isDone)
   yield return null;

4) Теперь наслаждайтесь загруженными данными на www.downloadHandler.data

0 голосов
/ 14 октября 2019

Это сработало для меня ...

UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(assetsFilepath);
www.SendWebRequest();
while (!www.isDone)
{
    Debug.Log("Downloading asset: " + www.downloadProgress);
}
if (www.error == null)
{
    string tempPath = Path.Combine(Application.persistentDataPath, assetsFilename);
    FileStream cache = new FileStream(path, FileMode.Create);
    cache.Write(www.downloadHandler.data, 0, www.downloadHandler.data.Length);
    cache.Close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...