[转]unity打包建议
针对项目的建议
unity项目中的3个特殊文件夹
a.Resources(只读)
Resources文件夹下的资源会被全部打包到apk或者ipa里面,相当与一个unity默认的AssetBundle,按理说是可以将游戏中所有的资源全部放在Resources进行加载,但是
Resources下的文件数量会影响游戏的启动速度,越多越慢。其次游戏为了降低drawcall,需要对相同材质的图像打包图集,但是如果放在Resources里面是没法打包图集的。
Resources下的资源打包时会进行压缩
b.StreamingAssets(只读)
StreamingAssets文件夹下的资源会被全部打包到apk或者ipa里面
StreamingAssets文件夹下的资源不会影响游戏启动速度
StreamingAssets文件夹下的资源不会被压缩,所以占用内存较大
c.persistentDataPath(可读写)
persistentDataPath文件夹在unity项目中是不存在的,他是程序的沙盒文件夹,只有你游戏安装完成之后,才会存在这个目录,但是它可读写。
综上三种文件夹,我们自己在使用时,Resources里面放的资源只是在本地开发阶段使用,打包的时候会把Resources中的文件都考本出去打成AssetBundle包,然后再将打包好的AssetBundle放到StreamingAssets文件夹下打包apk。
游戏运行时再将资源考本到persistentDataPath文件夹下,因为这个目录可读写,所以能够用来做资源热更新。
由于以上分析的几种加载手段各有各的使用情景和特点。因此建议在我们的项目中按照以下情景使用这些方法:
- 随游戏一同发布的AssetBundle(一般位于StreamingAssets文件夹中):
- 在打AssetBundle包时,使用LZ4压缩格式进行打包(开启BuildAssetBundleOptions.ChunkBasedCompression即可)。
- 在运行时需要加载AssetBundle对象时,使用LoadFromFile方法进行加载。
- 这样做的好处是:即可以将AssetBundle文件压缩,又可以兼顾加载速度,且节约内存。
- 作为更新包,需要从服务端下载的AssetBundle:
- 在打AssetBundle包时,使用默认的LZMA格式压缩。
- 使用http://WWW.LoadFromCacheOrDownload方法下载并缓存AssetBundle包文件。
- 这样做的好处是:获得了最大的压缩率,在下载过程中可以减少数据传输量。同时,在本地磁盘创建缓存之后,又可以兼顾之后的加载速度,且节约内存。
- 我们自己进行加密的AssetBundle:
- 在打AssetBundle包时,使用LZ4压缩格式进行打包(开启BuildAssetBundleOptions.ChunkBasedCompression即可)。
- 在运行时需要加载AssetBundle对象时,使用LoadFromMemory方法进行加载。(这也是从内存中使用流数据加载AssetBundle对象的仅有的使用场景。)
- 我们自己压缩的AssetBundle:
- 我们自己也可以使用第三方库或工具对生成的AssetBundle包文件进行压缩,如果需要这样做,则我们最好不要再使用Unity3D对 AssetBundle进行压缩,因此在打包时选择开启 BuildAssetBundleOptions.UncompressedAssetBundle。
- 在运行时需要加载AssetBundle对象时,使用LoadFromFileAsync方法进行异步加载。
///////////****以上摘自:http://www.cnblogs.com/jiangshuai52511/p/6437239.html 作者:凉城旧巷旧少年 ******/////////
浙公网安备 33010602011771号