打包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