Я разрабатываю приложение в Unity 2017.1.0f3 (для HoloLens, если это имеет значение). Это приложение имеет 3 сцены
- Сцена 1. Пользователь предоставляет учетные данные и аутентифицируется в службе.
- Сцена 2. Сервис предоставляет, и приложение отображает список ресурсов, из которых пользователь может выбирать.
- Сцена 3. После выбора ресурса
AssetBundle
загружается и отображается пользователю.
Это сопрограмма, которая загружает AssetBundle
IEnumerator GetAssetBundle(string assetUrl, Action<AssetBundle> successCallback, Action<string> errorCallback )
{
UnityWebRequest request = UnityWebRequest.GetAssetBundle(assetUrl);
yield return request.Send();
if (request.isHttpError || request.isNetworkError)
{
errorCallback(request.error);
}
else
{
AssetBundle bundle = ((DownloadHandlerAssetBundle)request.downloadHandler).assetBundle;
successCallback(bundle);
}
}
Пользователь имеет возможность переключаться между сценами и, возможно, дважды выбирать один и тот же ресурс. Это когда проблема возникает.
В первый раз, когда пользователь пытается загрузить AssetBundle
, все работает нормально. Второй (и все последующие) раз загрузка не удалась. Ошибка связана не с ошибкой процесса загрузки, а с тем, что этот((DownloadHandlerAssetBundle)request.downloadHandler).assetBundle;
всегда равен нулю.
Я думаю, что Unity не позволит вам загружать одно и то же AssetBundle
больше одного раза, и что вам придется кэшировать его после загрузки. Так ли это? Я хотел бы избежать этого, поскольку приложение может в конечном итоге иметь большое количество AssetBundle
, доступных для загрузки, и кэширование их всех после их загрузки - плохой вариант.
Знаете ли вы способ загрузить один и тот же AssetBundle несколько раз, если это необходимо?
Caching.CleanCache
. Также, если вы хотите превратить свой комментарий в ответ, чтобы я мог его принять - person Corcus   schedule 12.09.2017AssetBundle.Unload()
Если в вашей сцене есть игровые объекты, ссылающиеся на эти активы, ссылки на них пропадут Если вас это не волнует, используйте его. Правильное решение — вручную загрузить ресурс, как обычный файл, и сохранить его вручную. Не используйтеGetAssetBundle
илиDownloadHandlerAssetBundle
, если вы хотите сделать это таким образом. - person Programmer   schedule 12.09.2017