(转)AssetBundle打包 Unity4.x

打包API

  • BuildPipeline.BuildAssetBundle
    对除Scene以外的资源打包,支持单个和多个

  • BuildPipeline.BuildStreamedSceneAssetBundle
    对Scene文件打包,也支持单个和多个

打包参数

  • CompleteAssets
    用于保证资源的完备性。比如,当你仅打包一个Mesh资源并开启了该选项时,引擎会将Mesh资源和相关GameObject一起打入AssetBundle文件中;

  • CollectDependencies
    用于收集资源的依赖项。比如,当你打包一个Prefab并开启了该选项时,引擎会将该Prefab用到的所有资源和Component全部打入AssetBundle文件中;

  • 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

你可能感兴趣的:((转)AssetBundle打包 Unity4.x)