(转)AssetBundle打包|(转)AssetBundle打包 Unity4.x

打包API

  • BuildPipeline.BuildAssetBundle
    对除Scene以外的资源打包,支持单个和多个
  • BuildPipeline.BuildStreamedSceneAssetBundle
    对Scene文件打包,也支持单个和多个
打包参数
  • CompleteAssets
    用于保证资源的完备性。比如,当你仅打包一个Mesh资源并开启了该选项时,引擎会将Mesh资源和相关GameObject一起打入AssetBundle文件中;
  • CollectDependencies
    用于收集资源的依赖项。比如,当你打包一个Prefab并开启了该选项时,引擎会将该Prefab用到的所有资源和Component全部打入AssetBundle文件中;
  • 【(转)AssetBundle打包|(转)AssetBundle打包 Unity4.x】DeterministicAssetBundle
    用于为资源维护固定ID,以便进行资源的热更新。
Unity4.x 依赖打包
  • Unity4.x使用栈来构建AB包之间的依赖关系,简单的说就是被依赖的资源先打包入栈,然后再目标资源,然后再出栈。
var options = BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets; // 入栈-共享资源 BuildPipeline.PushAssetDependencies(); // 先打被依赖资源 BuildPipeline.BuildAssetBundle( AssetDataBase.LoadMainAssetAtPath("Assets/shared.png"), null, "shared.unity3d", options); // 入栈-目标资源A BuildPipeline.PushAssetDependencies(); BuildPipeline.BuildAssetBundle( AssetDataBase.LoadMainAssetAtPath("Assets/A.fbx"), null, "A.unity3d", options); // 出栈-目标资源A BuildPipeline.PopAssetDependencies(); // 入栈-目标资源 BuildPipeline.PushAssetDependencies(); BuildPipeline.BuildAssetBundle( AssetDataBase.LoadMainAssetAtPath("Assets/B.fbx"), null, "B.unity3d", options); // 出栈-目标资源B BuildPipeline.PopAssetDependencies(); // 出栈-共享资源 BuildPipeline.PopAssetDependencies();

  • 获取依赖
foreach(string item in AssetDatabase.GetDependencies("Assets/Role.prefab") { Debug.Log(item); }

Unity4.x 打包注意
  • AssetBundle资源间的依赖是通过Build时构建的栈来决定的,所以当B依赖A,而B需要更新的时候,其依赖的A也要重新打一次。
  • B依赖A,而A需要更新时,只需要重新打A即可。
  • 打包时必须开启DeterministicAssetBundle
https://blog.uwa4d.com/archives/ABtopic_1.html

    推荐阅读