第一步:打AB包
1、先创建一个AB包的按钮,如图
 
 新建一个脚本
 
public class BulidBundle : Editor
{
    [MenuItem("TOOL/BuildBundle")]
    public static void BuildAndroidBundle()
    {
    }
}
 
创建目录
 public static void BuildAndroidBundle()
    {
        // 设置AssetBundle的输出目录
        string saveDir = "Assets/StreamingAssets/AB";
        
        // 如果目录存在,先删除
        if (Directory.Exists(saveDir))
        {
            Directory.Delete(saveDir,true);
        }
        // 创建目录
        Directory.CreateDirectory(saveDir);
  	}
 
如下图,没有就自己新建吧
 
 创建AB包,加上完整代码
public class BulidBundle : Editor
{
    [MenuItem("TOOL/BuildBundle")]
    public static void BuildAndroidBundle()
    {
        // 设置AssetBundle的输出目录
        string saveDir = "Assets/StreamingAssets/AB";
        
        // 如果目录存在,先删除
        if (Directory.Exists(saveDir))
        {
            Directory.Delete(saveDir,true);
        }
        // 创建目录
        Directory.CreateDirectory(saveDir);
        //这个是一个结构体,包含以下元素
        //assetBundleName: AssetBundle 的名称。
        //assetNames: 包含在 AssetBundle 中的所有资源的路径数组。
        
        AssetBundleBuild[] buildMap = new AssetBundleBuild[2];
        buildMap[0] = new AssetBundleBuild();
        buildMap[0].assetBundleName = "Prefab_UI";
        buildMap[0].assetNames = new string[]{"Assets/Prefabs/Prefab_One.prefab","Assets/Prefabs/Prefab_Two.prefab"};
        
        buildMap[1] = new AssetBundleBuild();
        buildMap[1].assetBundleName = "Prefab_Altlas";
        buildMap[1].assetNames = new string[]{"Assets/Atlas/Atlas_One.spriteatlas"};
        BuildAssetBundleOptions options = BuildAssetBundleOptions.ChunkBasedCompression |
                                          BuildAssetBundleOptions.DeterministicAssetBundle;
        // ChunkBasedCompression: 启用基于块的压缩。这允许 AssetBundle 在加载时按块进行解压缩,而不是一次性解压缩整个包。这有助于减少内存使用,并改善加载性能。
        // DeterministicAssetBundle: 使 AssetBundle 构建过程具有确定性。这意味着相同的输入将始终产生相同的输出。这对于版本控制和确保构建的一致性很有用。
        BuildPipeline.BuildAssetBundles(saveDir, buildMap, options, BuildTarget.Android);
        // 刷新资源,确保新创建的Asset Bundles 能够在Editor中即时显示
        AssetDatabase.Refresh();
    }
}
 
buildMap[0].assetNames 这个是所有要打包的资源的名称,看下图
 
 如果是一个那就写一个 buildMap[1].assetNames = new string[]{“Assets/Atlas/Atlas_One.spriteatlas”};
 如图
 
 点击

 
至此,AB包完成打包



















