unity3d资源打包总结

内容纲要

unity 打包的时候会把下面几个文件资源打进apk或者ipa包里面

1. Asset下的所有脚本文件

2. Asset下所有引用的文件(比如 场景中直接使用到的资源)

3. (这里的resorces不是特指根目录下的Resources,也可以是子目录下的,只要文件夹名字叫Resources就可以)Resources文件夹下所有资源,这个文件夹下的资源无论是否被用到,都会被压缩打进包里面,程序中通过Resources.Load来加载

4 StreamingAssets。这个文件夹会不会被压缩,被原封不动地打进包,是个只读文件夹。有热更新的游戏,会把打包的assertbundle放在这个文件夹下,游戏开始的时候,会把这些assertbundle 拷贝到Application.persistentDataPath目录下(这个目录可以读写)。如果有新的资源,下载到的新assertbundle 会覆盖原来的资源。

5.Plugins 这个文件夹只能是Assets文件夹的直接子目录。它是用来放native插件的

关于assertbundle,unity  提供了BuildPipeline.BuildAssetBundles方法,我们可以用BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies()处理资源依赖关系。比如:

//公共的关联性素材绑定

     A  BuildPipeline.PushAssetDependencies();

        assetfile = assetPath + "shared" + AppConst.ExtName;

        mainAsset = LoadAsset("UI/Shared/Atlas/Dialog.prefab");

        addis = new Object[3];

        addis[0] = LoadAsset("Atlas/BattleAtlas.prefab");

        addis[1] = LoadAsset("Atlas/CardAtlas.prefab");

        addis[2] = LoadAsset("Atlas/DialogAtlas.prefab");

  BuildPipeline.BuildAssetBundle(mainAsset, addis, assetfile, options, target);

///生成LoginPanel素材绑定

  B     BuildPipeline.PushAssetDependencies();

        mainAsset = LoadAsset("UI/Login/Prefabs/LoginPanel.prefab");

        assetfile = assetPath + "login" + AppConst.ExtName;

        BuildPipeline.BuildAssetBundle(mainAsset, null, assetfile, options, target);

    C    BuildPipeline.PopAssetDependencies();

///生成BattlePanel素材绑定

    D  BuildPipeline.PushAssetDependencies();

        mainAsset = LoadAsset("UI/Battle/Prefabs/BattlePanel.prefab");

        assetfile = assetPath + "battle" + AppConst.ExtName;

        addis = new Object[1];

        addis[0] = LoadAsset("UI/Battle/Prefabs/UICard.prefab");

        BuildPipeline.BuildAssetBundle(mainAsset, addis, assetfile, options, target);

    E    BuildPipeline.PopAssetDependencies();

    F  BuildPipeline.PopAssetDependencies();

A和F对应  B和C对应  D和E对应,说明LoginPanel和BattlePanel资源会用到公共资源shared的。

unity5 提供了自动处理依赖关系,不过每个资源都需要在编辑器上手动设置assetbundleName。

发表回复