我正在尝试获取资产大小,我从远程服务器下载。我试图从http标头获取内容大小,但我只能在此请求完成时访问它,否则我从www.GetResponseHeaders()函数收到null。我试图使用DownloadHandlerAssetBundle处理程序,但我无法获得内容长度。如果我编写扩展DownloadHandlerScript的自定义类,我可以覆盖此方法
protected void ReceiveContentLength(long contentLength);
然后我松开了DownloadHandlerAssetBundle方法。这是我目前使用的代码:
www = UnityWebRequest.GetAssetBundle(url);
//DownloadHandlerAssetBundle handler = new DownloadHandlerAssetBundle(www.url, uint.MaxValue) ;
//www.downloadHandler = handler;
yield return www.Send();
if (www.isError)
{
Debug.Log(www.error);
}
else
{
AssetBundle bundle = ((DownloadHandlerAssetBundle)www.downloadHandler).assetBundle;
string[] scenePath = bundle.GetAllScenePaths();
...
}
我尝试创建自定义downloadHandler https://unity.xiaomo.info/Manual/UnityWebRequest-CreatingDownloadHandlers.html
时使用的此页面在更新中,这是我获取当前下载字节的方式:
www.downloadedBytes
所以问题是,我怎样才能获得总资产规模。
答案 0 :(得分:1)
如果你查看UnityWebRequest.GetAssetBundle
的文档,它就不会在标题中发送任何其他数据。这是一项针对Assetbundles的特殊请求,可以在数据完全下载之前提取数据。
此方法创建UnityWebRequest,将方法设置为GET,并将目标URL设置为字符串uri参数。不设置其他标志或自定义标题。
https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.GetAssetBundle.html
此方法将DownloadHandlerAssetBundle附加到 UnityWebRequest。这个DownloadHandler有一个特殊的 DownloadHandlerAssetBundle.assetBundle属性,可用于 一旦下载了足够的数据,就提取资产包 解码以允许访问捆绑包内的资源。
您是希望大小通知下载进度还是在用户开始下载之前显示下载大小?
如果您创建了异步加载程序AssetBundle.LoadAssetAsync,下载进度可以访问进度属性。
如果通知用户,请尝试使用标准UnityWebRequest并检索包含content-length的完整请求标头。然后在开始下载之前用DownloadHandlerAssetBundle.assetBundle替换UnityWebRequest.downloadHandler? (我不确定这部分,但它是我会尝试的。) 也许调用一个标准的UnityWebRequest来获取内容长度,然后用GetAsset版本替换这个标准的UnityWebRequest?