Unity Asset BuildPipeline.PushAssetDependencies 函数

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的导出资源。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
buildpipeline.buildassetbundle 是 Unity 引擎中的一个方法,用于将场景或资源打包成 AssetBundle,以便在游戏运行时动态加载。 具体用法如下: ```csharp public static AssetBundleBuild[] CreateAssetBundleBuilds() { // 创建一个包含需要打包的资源信息的 AssetBundleBuild 数组 AssetBundleBuild[] buildMap = new AssetBundleBuild[1]; buildMap[0].assetBundleName = "myassetbundle"; buildMap[0].assetNames = new string[] { "Assets/MyScene.unity", "Assets/Prefabs/MyPrefab.prefab" }; return buildMap; } public static void BuildAssetBundles() { // 获取打包输出目录 string outputPath = "Assets/AssetBundles"; // 打包配置信息 BuildAssetBundleOptions buildOptions = BuildAssetBundleOptions.None; BuildTarget buildTarget = BuildTarget.StandaloneWindows; // 创建打包目录 if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); } // 执行打包 AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(outputPath, CreateAssetBundleBuilds(), buildOptions, buildTarget); // 打包完成后的操作 if (manifest != null) { Debug.Log("AssetBundle 打包完成!"); } else { Debug.LogError("AssetBundle 打包失败!"); } } ``` 以上代码会将场景 "Assets/MyScene.unity" 和预制件 "Assets/Prefabs/MyPrefab.prefab" 打包成一个名为 "myassetbundle" 的 AssetBundle,并输出到 "Assets/AssetBundles" 目录下。 需要注意的是,如果资源的路径中包含中文或特殊字符,在打包时可能会出现问题。因此,最好将资源放在英文命名的文件夹中,并使用相对路径来指定资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值