c# - UnityWebRequestAssetBundle.GetAssetBundle:为什么下载不使用可用带宽?
问题描述
我有一个应用程序(平台:Android),我需要从服务器下载资产包。为了做到这一点,我正在使用UnityWebRequest
对象:
public IEnumerator GetAssetBundleAsync(string url, Action<AssetBundle> OnSuccess)
using (UnityWebRequest uwr = UnityWebRequestAssetBundle.GetAssetBundle(url))
{
yield return uwr.SendWebRequest();
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(uwr);
if (OnSuccess != null)
OnSuccess(bundle);
}
}
现在我已经做了一些性能测试(见图:)。“In Unity”表示我的应用程序(在 Android 上)进行下载时的数据吞吐量。但是,“在浏览器中”表示直接在我的 Windows 笔记本电脑的浏览器中下载时的吞吐量。两台设备都连接到同一个WIFI。如您所见,后者的最大吞吐量要高得多。
有谁知道为什么从 Unity 应用程序内部下载时吞吐量受到限制以及如何最大化它?
解决方案
通过将数据下载为原始字节并将它们作为资产包从内存中加载,我能够绕过以下问题:
public IEnumerator GetAssetBundleByRawBytes(string url, Action<AssetBundle> onSuccess)
{
using (UnityWebRequest uwr = UnityWebRequest.Get(url))
{
yield return uwr.SendWebRequest();
var bundle = AssetBundle.LoadFromMemory(uwr.downloadHandler.data);
if (onSuccess != null)
onSuccess(bundle);
}
}
这样所有可用的带宽都被使用了。
推荐阅读
- r - 将字符转换为数字
- javascript - 无法解析类中的方法
- javascript - 当站在当前扇区 (id) 上时,菜单链接会在一页网站上突出显示。
- windows - 从 Windows 中的 QProcess 读取二进制数据
- django - 自定义 Django FileField url 小部件不会在管理员 change_form 中上传任何文件
- javascript - d3 拖动仅在突出显示轴刻度时有效
- javascript - 将base64图像绑定到图像标签jquery
- spring-boot - @Query 不工作 Spring Data JDBC 1.0.0.M3
- apache-spark - 使用 prometheus JMX 代理从在单个节点上运行的多个 spark executor 导出指标
- javascript - 过早调用 JQuery 点击监听器