使用Asset Bundles减少Unity WebGl构建大小

时间:2017-05-17 15:08:28

标签: c# unity3d unity-webgl

我们有一个包含700多张图片的Unity应用, 现在,构建大小对我们来说是一个真正的问题,所以我们正在研究 如何减少构建大小。

我们想从我们的服务器下载图像,因此我们创建了 下载图片的小脚本:

public IEnumerator LoadImages(List<string> imageNames, System.Action<int> callback) {
  int downloadedImages = 0;
  foreach (string imageName in imageNames) {
    string imageUrl = spriteNamesAndUrls[imageName];
    var www = new WWW(imageUrl);
    yield return www;
    Texture2D texture = new Texture2D(1, 1);
    www.LoadImageIntoTexture(texture);
    Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.one/2);
    sprites.Add(imageName, sprite);
    downloadedImages += 1;
  }
  callback(downloadedImages);
}

(我简化了这个问题的代码)

这个脚本的问题在于,我被迫转换了数百张图片 进入Sprites / Textures,这是一个不必要的问题,我们不需要在一个场景中渲染超过20个精灵。

所以现在我正在研究使用资产包,这似乎是一个内置的解决方案。

我的问题是,

是&#34; Asset Bundle&#34;与上面的脚本相比,这是一个减少WebGl构建大小的好方法吗?

考虑到我有一个超过700张图片的资源文件夹(总共19MB)

2 个答案:

答案 0 :(得分:1)

  

应用程序因内存问题而崩溃,可能是因为   数百个http电话。

这与WebGL biuld大小无关。仔细观察,webGL构建/播放器设置中有一个内存大小参数。你可以在哪里增加它来解决问题。

enter image description here

但是在设置内存大小时需要小心,如果它太大,浏览器会拒绝所请求的内存,并且无法加载播放器。

在此处详细了解:Memory Considerations when targeting WebGL

HTTP调用不是问题,问题是大量图像被加载到浏览器的内存中。如果您使用资产包,您将面临同样的问题,因为您将通过创建精灵或其他方式将所有这些图像加载到浏览器的内存中。

希望这有帮助。

答案 1 :(得分:0)

  

与上面的脚本相比,“资产捆绑包”是减少WebGl构建大小的好方法吗?

是的,资产捆绑包是一个功能更强大的工具。您可以下载和缓存任何类型的资产,包括完整的场景。

您可以在此处阅读更多有关Assets Bundle用例的信息:

https://unity3d.com/es/learn/tutorials/topics/scripting/assetbundles-and-assetbundle-manager

使用时的一些最佳做法:

https://unity3d.com/es/learn/tutorials/topics/best-practices/assetbundle-usage-patterns