1 给要打包的资源设置标记,表示对应的包名:
2 Unity5 AssetBundle不需要我们来管理引用关系了
3 可以使用代码批量设置包名
AssetImporter ai = AssetImporter.GetAtPath(assetPath);
i.assetBundleName = xxx;
ai.assetBundleVariant = xxx;
4 Build the AssetBundles
Create a folder called Editor in the Assets folders, and place a script with the following contents in the folder:
using UnityEditor;
public class CreateAssetBundles
{
[MenuItem("Assets/Build AssetBundles")]//菜单选项
static void BuildAllAssetBundles()
{
string assetBundleDirectory = "Assets/AssetBundles";//打包到哪里
if(!Directory.Exists(assetBundleDirectory))
{
Directory.CreateDirectory(assetBundleDirectory);
}
BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
}
}
BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
是主要的打包函数。
其中第二个参数,
BuildAssetBundleOptions
BuildAssetBundleOptions.None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。
BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快
BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。
注意使用LZ4压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小。
https://docs.unity3d.com/Manual/AssetBundles-Building.html
调用该函数,unity会自动根据资源的标签进行打包,而且是增量打包,
a.对于资源没有变更的bundle包,不会触发重新打包;
b.资源没变,即使生成目录下的bundle包被删除了,unity也不会重新打包;
c.生成目录下的bundle包对应的manifase被删了,会重新打包;
d.可以使用BuildAssetBundleOptions.ForceRebuildAssetBundle参数触发强制重新打包。