Unity3d AssetBundle 资源加载与管理

摘要:
包中的AssetBundle只能放在StreamingAssets目录中,其他目录无法读取。在加载AssetBundle之前,您需要使用AssetBundleManifest来提取每个AssetBundle的相关性。每个平台下的线束不同。您需要指定BuildTarget的生成平台。

设置AssetBundle

BuildPipeline.BuildAssetBundles(
    outPath, 
    builds.ToArray(), 
    BuildAssetBundleOptions.ChunkBasedCompression, 
    BuildTarget.StandaloneWindows64
    );

outPath是AssetBundle输出的目录,我们设置为StreamingAssets目录。

包体内的AssetBundle只能放在StreamingAsstes目录,别的目录是无法读取的。

加载AssetBundle之前,需要使用AssetBundleManifest提取每个AssetBundle的相互依赖关系。

string outPath = Path.Combine(Application.dataPath, "StreamingAssets");
//如果目录已经存在删除它
if (Directory.Exists(outPath)){
    Directory.Delete(outPath, true);
}
Directory.CreateDirectory(outPath);

builds是AssetBundleBuild类型的泛型集合

List<AssetBundleBuild> builds = new List<AssetBundleBuild>();

每个AssetBundle都需要一个AssetBundleBuild类型的实例对象来设置需要打包的文件和打包后的文件名

builds.Add(new AssetBundleBuild() {
    assetBundleName = "Cube.unity3d",
    assetNames = new string[] {
        "Assets/Cube.prefab",
        "Assets/Cube 2.prefab"
    }
});
builds.Add(new AssetBundleBuild() {
    assetBundleName = "NewMaterial.unity3d",
    assetNames = new string[] {
        "Assets/New Material.mat"
    }
});

BuildAssetBundleOptions.ChunkBasedCompression是AssetBundle提供的一种压缩格式

1.LZMA压缩,压缩体积小,但是每次使用都要解压,可能会卡顿,不建议使用。

2.BuildAssetBundleOptions.UncompressedAssetBundle 不压缩,缺点是构建出来的AssetBundle体积比较大,有点事加载比较快。

但可以将不被压缩的构建出来后再用第三方压缩算法压缩他上传到CDN,这样下载时还是压缩过的但使用时是不压缩的读取也更快了。

3.BuildAssetBundleOptions.ChunkBasedCompression LZ4压缩,他是介于二者之间的折中方案,构建后的体积会比不压缩的小一些,加载速度比LZMA快一些,建议使用。

BuildTarget.StandaloneWindows64是Bundle文件的构建平台。

每个平台下的Bundle都不一样,需要指定BuildTarget的构建平台。

免责声明:文章转载自《Unity3d AssetBundle 资源加载与管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转]SQL SERVER 函数组合实现oracle的LPAD函数功能一起谈.NET技术,给大家分享两款正在使用的reflector插件 狼人:下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[Unity3D]引擎崩溃、异常、警告、BUG与提示总结及解决方法

转 http://blog.sina.com.cn/s/blog_5b6cb9500101ai9h.html   此贴会持续更新,都是项目中常会遇到的问题,总结成贴,提醒自己和方便日后检查,也能帮到有需要的同学。 若各位有啥好BUG好异常好警告好崩溃可以分享的话,请多多指教。xuzhiping7#qq.com。   1.U3D经常莫名奇妙崩溃。   一般是...

Unity资源内存管理--webstream控制

一 使用前提 1,需要使用资源热更新 2,使用Assetbundle资源热更(AssetBundle是产生webstream的元凶) 二 为什么要用AssetBundle AssetBundle本质上就是一个压缩算法,只不过比起zip等一些压缩多了一些信息,比如平台信息(Ios,android),依赖信息等,既然是压缩,那就很好理解了,AssetBundl...

使用 async-await 简化代码的检讨

  从API版本升级到4.6之后, Unity支持了async和await语法, 并且根据测试来看, 它运行在主线程里, 跟一般的C#编译不大一样, 这就很有操作空间了, 先来看看普通C# Console工程和Unity中运行的差别:   1. C# Console using System; namespace AsyncTest { clas...

发布WebGL的过程

  今天测试了一下发布 WebGL 的过程, 通过 Unity3D 创建, 相当麻烦, 它不仅对API有限制, 对测试Debug有限制, 也对服务器有要求, 并且现在的浏览器都很注重安全策略, 这些都增加了复杂度...   流程大概如下:   1. 做个简单场景, 放到 BuildSettings 里面去   2. 如果有代码, 检查是不是有不能使用的AP...

使用Assetbundle时可能遇到的坑

原地址:http://www.cnblogs.com/realtimepixels/p/3652128.html 一 24 十一郎未分类 No Comments 转自 http://www.unitymanual.com/blog-3571-132.html 1.Editor版本不能读取与自己版本不同的assetbundle这个问题描述起来很简单:比如:...

Unity热更新 AssetBundle

在游戏开发中,常常需要用到热更新技术。比如:一个手机游戏开发好后,用户安装到手机上。如果此时我们要更新一个新的功能,如果没有热更新,那么需要用户卸载掉手机上的游戏,然后安装新的包,这样做十分麻烦,而且容易流失用户。这个时候就需要使用热更新技术,让用户在手机上下载新的游戏功能,不用重新下载就行了。下面使用的AssetBundle,严格意义上来说不算是热更新,...