1.BuildPipeline.BuildAssetBundle :打包常规资源生成AssetBundle.
static function BuildAssetBundle (mainAsset : Object, assets : Object[], pathName : string, options : BuildAssetBundleOptions = BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets, targetPlatform : BuildTarget = BuildTarget.WebPlayer) : bool
- Object mainAsset:指定mainAsset,这样解析该AssetBundle包的时候可以通过assetBundle.mainAsset得到。
- Object[] assets:指定所有asset,传入对象数组.解析的时候可以通过LoadAsset(“name”)得到。
- pathName:指定生成的AB包的存储路径
BuildAssetBundleOptions:打包时候的一些特定属性选项。
- 一些选项如下表所示
属性 | 说明 |
---|---|
CompleteAssets | 用于保证资源的完备性,默认开启 |
CollectDependencies | 用于收集资源的依赖项,默认开启 |
DeterministicAssetBundle | 用于为资源维护固定ID,默认开启 |
DisableWriteTypeTree | 禁用写入类型树 |
UncompressedAssetBundle | 打包时不进行压缩 |
- targetPlatform:适用平台。选择该AssetBundle应该使用哪些平台
属性 | 说明 |
---|---|
StandaloneWindows | 打包32位windows平台上的包 |
StandaloneWindows64 | 打包64位windows平台上的包 |
IOS | 打包ios平台上的包 |
Android | 打包Android平台上的包 |
2.BuildStreamedSceneAssetBundle:将场景打包成AsssetBundle包
- levels:欲打包的所有场景文件路径。
- localtionPath : 生成AssetBundle包保存的相对路径。
- target : 同上。
- options : 同上。
注:WWW下载好场景AssetLevle包之后通过获取成员属性assetBundle就可以吧场景信息读入到内存中了。然后只需要通过Application.LoadLevel(name)就可以加载对应的场景。
3.WWW类,通过一个路径进行下载(服务器和本地的操作都一样)
WWW www = new WWW (Url);
- Url:下载路径,本地下载请加上
file://
,服务器下载请加上http://
注:www下载后的得到的对象可以通过获取成员属性assetBundle,即可得到下载文件的AssetBundle包。不过该方法下载得到的资源统统是放在内存里面的,也就是说每次打开游戏都需要重新下载。
4.WWW.LoadFromCacheOrDownload : 通过路径和版本号下载
public static WWW LoadFromCacheOrDownload(string url, int version, uint crc = 0);
Url:下载路径,本地下载请加上
file://
,服务器下载请加上http://
Version:版本号;这个版本号不需要你自己去维护,每次Unity从服务器下载资源的到本地的时候都会维护这个资源的版本号。当下次调用该API下载该资源会先对比本地版本号和参数版本号是否匹配,如果不匹配就从服务器重新下载,否则就从磁盘缓存文件中读取。
注: www下载后的得到的对象可以通过获取成员属性assetBundle,即可得到下载文件的AssetBundle包。该方法下载的资源是缓存到电脑缓存文件中的,另外按照宣雨松大大的说法,这个方法是一个异步方法,还占用内存,建议改用AssetBundle.CreatFromFile 它是一个同步方法,并且现在IOS 和 android 都支持了,最重要的一点就是用这个方法下载下载路径不需要加(file://
或者http://
前缀),切记,这是一个巨坑
5.BuildPipeline.PushAssetDependencies: 资源入栈& BuildPipeline.PopAssetDependencies: 资源出栈
这个就主要用于打包的资源具有依赖关系时的场景
Push和Pop都是成对使用,一个Push/Pop对就相当于一个Layer(层),层可以嵌套,内层可以依赖外层的资源。也就是说内层某资源在打包时,如果其引用的某个资源已经在外层加载了,那么内层的这个资源包就会包含该资源的引用而不是资源本身(大大缩减了资源包的大小)。Push/Pop实际上维持了一个依赖的堆栈。那么,在加载依赖资源包时,需要注意的是:先加载依赖的资源,然后加载其他资源,需要确保这个顺序。