2017-08-14 20 views
1

我正在嘗試獲取從遠程服務器下載的資產大小。我試圖從http頭獲取內容大小,但是隻有當這個請求結束時我才能訪問它,否則我從www.GetResponseHeaders()函數收到null。我試圖使用DownloadHandlerAssetBundle處理程序,但無法獲取內容長度。如果我寫延伸DownloadHandlerScript自定義類,然後我就可以重寫此方法如何獲得UnityWebRequest.GetAssetBundle內容長度屬性?

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

如果您查看UnityWebRequest.GetAssetBundle的文檔,它不會在標頭中發送任何其他數據。這是一個針對Assetbundles的特殊要求,能夠在數據完全下載之前提取數據。

此方法創建UnityWebRequest,將方法設置爲GET並將目標URL設置爲字符串uri參數。不設置其他標誌或自定義標題。

https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.GetAssetBundle.html

該方法附加一個DownloadHandlerAssetBundle到 UnityWebRequest。這個DownloadHandler有一個特殊的 DownloadHandlerAssetBundle.assetBundle屬性,一旦足夠的數據被下載並且 被解碼以允許訪問捆綁內部的資源,該屬性可用於提取資產捆綁包 。

你想讓大小通知下載進度,或者你是否顯示下載大小爲用戶開始下載之前?

下載進度如果您創建一個異步加載程序AssetBundle.LoadAssetAsync,您可以訪問進度屬性。

如果通知用戶,請嘗試使用標準UnityWebRequest並檢索包含內容長度的完整請求標頭。然後在開始下載之前用DownloadHandlerAssetBundle.assetBundle替換UnityWebRequest.downloadHandler? (我不確定這一部分,但這是我會嘗試。) 也許調用一個標準的UnityWebRequest獲取內容的長度,然後用GetAsset版本替換這個標準的UnityWebRequest?

+0

感謝您的回覆。我正在嘗試獲取資產大小,以顯示您已經從y MB下載了x mb。我正在嘗試通知下載進度。我可以訪問進度浮點值,但是我想顯示下載資源的總大小。按照你的建議看來,我將不得不提出2個請求,一個請求提取資產大小,另一個請求提取資產本身。 Unity是否只有接收請求標題數據的方法,而不下載文件本身?另外我相信,LoadAssetAsync會加載已下載的資產,所以我在本地加載資產時會收到進展。 –

+1

我發現如何獲取只有標題,與此:https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.Head。html,所以我將要求標題,而不是資產本身,再次感謝您的幫助。 –