BuildPipeline.PushAssetDependencies函数与BuildPipeline.PopAssetDependencies函数应为一一对应关系。
体现在使用BuildPipeline.BuildAssetBundle进行打包的操作中。
主要目的是可以让一些需要使用引用方式访问的Asset资源不需要被打到资源包中,可以尽量的减少资源的大小。
不过说实话使用起来有点蛋疼。
首先要使用这个操作,要求你在这次的打包过程中需要将所有资源进行一次打包操作,而无法使用原先已经打包过的资源(这个未经确认,个人目前感觉)
打包资源的顺序需要先打包基础包。
假设基础包对象为BaseObj引用对象。实例对象为MainObj引用对象。让MainObj打出来的包可以引用BaseObj打出的包的代码方式如下:
BuildAssetBundleOptions option =
BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets;
BuildPipeline.PushAssetDependencies();
BuildPipeline.BuildAssetBundle(BaseObj, null, BaseObjPath, option);
BuildPipeline.BuildAssetBundle(MainObj, null, MainObjPath, option);
BuildPipeline.PopAssetDependencies();
参数部分不进行详细说明。
从使用方式看来,在Push函数开始的时候进行某一次资源引用信息记录,在Push操作之后的所有打包操作都将记录进某个信息集合,用于Pop操作前的打包资源引用关系计算。
因此BaseObj的打包必须先进行。而后进行MainObj的打包。
另外,BaseObj的打包必须在MainObj的打包操作之前。
在读取使用资源上,需要保证BaseObj资源先被载入(调用WWW.assetbundle.LoadAll())。假设BaseObj有在其他包被引入,引入其他包并不能使通过上述过程打包出的MainObj资源正常显示(即使是用同样过程不同时间打出来的包也一样,另外一方面,通过以上过程打出来的不同的包文件名和路径是可以随意更改的,并不影响引用)。
如你需要打包出的资源可以重复利用,需要在打包参数中添加BuildAssetBundleOptions.DeterministicAssetBundle项。这样不同时间打包出的资源就可以兼容使用。
Push操作和Pop操作的配对是可以进行嵌套的。嵌套的资源可共享嵌套层次更浅的资源,而无法共享嵌套层次更深的资源。如:
Push
Build Res A
Push
Push
Build Res B
Pop
Build Res C
Pop
Build Res D
Pop
以上的逻辑代码中,C资源是无法共享B的导出资源的。但是B,C资源都可以共享A的导出资源。