如何获取UnityWebRequest.GetAssetBundle内容长度属性?

时间:2017-08-14 10:33:53

标签: c# unity3d

我正在尝试获取资产大小,我从远程服务器下载。我试图从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

所以问题是,我怎样才能获得总资产规模。

1 个答案:

答案 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?