Sha*_*rif 1 c# unity-game-engine unitywebrequest
我还是新手,使用 UnityWebRequest 从服务器容器下载和加载资产包。问题是下载进度的值始终为 0。如何获取下载进度的值?
代码下面是我尝试下载并获取下载进度的内容。
//Method to download the assetbundle
IEnumerator DownloadAsset()
{
string url = here the URL for asset bundle;
using (var uwr = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET))
{
uwr.downloadHandler = new DownloadHandlerAssetBundle(url, 36, 0);
UnityWebRequestAsyncOperation operation = uwr.SendWebRequest();
yield return StartCoroutine(DownloadProgress(operation));
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(uwr);
{
print("Get asset from bundle...");
}
//Load scene
uwr.Dispose();
print("ready to Load scene from asset...");
StartCoroutine(LoadSceneProgress("Example"));
bundle.Unload(false);
}
}
//Method for download progress
IEnumerator DownloadProgress(UnityWebRequestAsyncOperation operation)
{
while (!operation.isDone)
{
progressBar.color = Color.red;
downloadDataProgress = operation.progress * 100;
progressBar.fillAmount = downloadDataProgress / 100;
print("Download: " + downloadDataProgress);
yield return null;
}
Debug.Log("Done");
}
Run Code Online (Sandbox Code Playgroud)
我希望显示下载进度条或下载百分比以在屏幕上显示下载进度。但下载进度值始终为 0。
代替
yield return StartCoroutine(DownloadProgress(operation));
Run Code Online (Sandbox Code Playgroud)
的正确方法是yield荷兰国际集团的IEnumerator根本
yield return DownloadProgress(operation);
Run Code Online (Sandbox Code Playgroud)
然而,为什么不直接在同一个协程中做呢?
然而,我建议宁可使用UnityWebRequestAssetBundle.GetAssetBundle而不是自己从头开始配置它和其他一些更改:
IEnumerator DownloadAsset()
{
string url = "<here the URL for asset bundle>";
/*
* directly use UnityWebRequestAssetBundle.GetAssetBundle
* instead of "manually" configure and attach the download handler etc
*/
using (var uwr = new UnityWebRequestAssetBundle.GetAssetBundle(url, 36, 0)
{
var operation = uwr.SendWebRequest();
/*
* this should be done only once actually
*/
progressBar.color = Color.red;
while (!operation.isDone)
{
/*
* as BugFinder metnioned in the comments
* what you want to track is uwr.downloadProgress
*/
downloadDataProgress = uwr.downloadProgress * 100;
/*
* use a float division here
* I don't know what type downloadDataProgress is
* but if it is an int than you will always get
* an int division <somethingSmallerThan100>/100 = 0
*/
progressBar.fillAmount = downloadDataProgress / 100.0f;
print("Download: " + downloadDataProgress);
yield return null;
}
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(uwr);
{
print("Get asset from bundle...");
}
/*
* You do not have to Dispose uwr since the using block does this automatically
*/
//uwr.Dispose();
//Load scene
print("ready to Load scene from asset...");
StartCoroutine(LoadSceneProgress("Example"));
bundle.Unload(false);
}
}
Run Code Online (Sandbox Code Playgroud)
Mayur Asodariya 的注释来自他的评论如下:
您的服务器可能没有提供下载大小,因此没有进度信息。在这种情况下,您可以按照这篇文章正确配置您的服务器。
| 归档时间: |
|
| 查看次数: |
8089 次 |
| 最近记录: |