AssetBundle之依赖关系的处理

实际情况:我们经常会在两个或者多个Prefab中使用同一份的贴图和材质,如果直接进行打包,则会打包两份贴图和材质,造成资源的冗余。同类型的资源,通常可以打包成一个bundle。

解决方法:我们可以直接在可能冗余的资源上输入AssetBundle的名字和后缀,然后进行打包,这样预设体会自动依赖材质和贴图。

我们都知道当我们创建AssetBundle时,会自动创建对应的Manifest文件(资源依赖关系文本),通过这个依赖关系文本我们可以查看一些内容:

ManifestFileVersion: 0
CRC: 3016748493
Hashes:
  AssetFileHash:
    serializedVersion: 2
    Hash: 5d6fcb1542baac34dd0b8407dc2fd99b
  TypeTreeHash:
    serializedVersion: 2
    Hash: 31d6cfe0d16ae931b73c59d7e0c089c0
HashAppended: 0
ClassTypes: []
Assets:
- Assets/Scenes/SceneBundle.unity
Dependencies: []

在Dependencies:[]中存放的就是对应的依赖关系。

使用脚本自动打包和处理依赖关系

现实情况:在游戏中一般游戏资源都是比较多,如果一个一个设置AssetBundle的名称和依赖就比较麻烦了,

因此我们也可以使用代码自动的进行打包,和处理对应的依赖关系。

对应的代码如下:

 [MenuItem("Assets/Tools/SetAssetBundleDep")]
    static void SetAssetBundleDep()
    {
        string outPath = Path.Combine(Application.dataPath,"StreamingAssets");//存放位置
        if (Directory.Exists(outPath))//文件是否存在
        {
            Directory.Delete(outPath);
        }
        Directory.CreateDirectory(outPath);//创建一个新的路径
        List<AssetBundleBuild> builds = new List<AssetBundleBuild>();
        //设置Assetbundle的名字,将多个资源构建在同一个AssetBundle内
        builds.Add(new AssetBundleBuild()
        {
            assetBundleName = "Cube",//bundle的名字
            assetNames = new string[]{"Assets/Prefabs/Cube1.prefab", "Assets/Prefabs/Cube2.prefab" }//需要进行打包的资源的名字(需要提供完整的路径)

        });
        //依赖的资源单独打包
        builds.Add(new AssetBundleBuild()
        {
            assetBundleName = "Mat",
            assetNames=new string[] { "Assets/Prefabs/Mat.mat"}

        });
        //构建Assetbundle
        BuildPipeline.BuildAssetBundles(outPath,builds.ToArray(),BuildAssetBundleOptions.ChunkBasedCompression,BuildTarget.Android);
        //刷新
        AssetDatabase.Refresh();

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity中,可以使用AssetBundle来打包和加载资源,而动态控制AssetBundle依赖关系是实现资源动态加载和更新的重要步骤。以下是一种常见的方法来实现动态控制AssetBundle依赖关系: 1. 创建AssetBundle:首先,你需要创建和打包AssetBundle。你可以使用Unity的BuildPipeline.BuildAssetBundles方法来生成AssetBundle文件,并且可以指定资源及其依赖项的路径。 2. 加载主AssetBundle:在运行时,你需要加载主AssetBundle,这是整个资源加载的起点。你可以使用AssetBundle.LoadFromFile或AssetBundle.LoadFromMemoryAsync等方法来加载主AssetBundle。 3. 加载依赖项:一旦主AssetBundle加载完成,你可以通过AssetBundle.GetAllDependencies方法获取它的所有依赖项的名称。然后,你可以使用AssetBundle.LoadFromFile或AssetBundle.LoadFromMemoryAsync等方法来加载这些依赖项的AssetBundle文件。 4. 加载资源:当所有依赖项的AssetBundle都加载完成后,你可以使用AssetBundle.LoadAsset或者AssetBundle.LoadAssetAsync等方法来加载资源。这些资源可以是场景、模型、纹理等。 5. 卸载AssetBundle:一旦你加载了所需的资源,你可以使用AssetBundle.Unload方法来卸载不再需要的AssetBundle。但要注意,如果你还在使用该AssetBundle中的资源,那么卸载后将无法访问这些资源。 通过以上步骤,你可以实现动态控制AssetBundle依赖关系,实现资源的灵活加载和更新。当你需要更新资源时,你可以重新构建AssetBundle并替换旧的AssetBundle文件,然后再次按照上述步骤加载新的AssetBundle即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值