Unity SBP打包与传统打包,Atlas(spriteatlasv2)的差异

2025/11 20 09:11

传统打包会剔除 默认引用资产

以下打包没有问题

[MenuItem("Tools/PackAssetbundle")]
public static void Start()
{
    AssetBundleBuild[] builds = new AssetBundleBuild[1];
    builds[0].assetBundleName = "TestAssetBundle";
    builds[0].assetNames = new string[]
    {
        "Assets/ab/atlas/1.png",
        "Assets/ab/atlas/2.png",
        "Assets/ab/atlas/3.png",
        "Assets/ab/atlas/4.png",
        "Assets/ab/index/atlas.spriteatlasv2",
    };
    
    BuildAssetBundleOptions opt = BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.DeterministicAssetBundle;
    BuildTarget target = BuildTarget.WebGL;
    BuildPipeline.BuildAssetBundles("Assets/StreamingAssets/", builds, opt, target);

}

这样打包也没问题

    builds[0].assetNames = new string[]
    {
        "Assets/ab/index/atlas.spriteatlasv2",
    };

SBP打包会全量打包输入的资产

这样打包没有问题

[MenuItem("Tools/PackAssetbundle")]
public static void Start()
{
    AssetBundleBuild[] builds = new AssetBundleBuild[1];
    builds[0].assetBundleName = "TestAssetBundle";
    builds[0].assetNames = new string[]
    {
        "Assets/ab/index/atlas.spriteatlasv2",
    };
    
    BuildAssetBundleOptions opt = BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.DeterministicAssetBundle;
    BuildTarget target = BuildTarget.WebGL;
    UnityEditor.Build.Pipeline.CompatibilityBuildPipeline.BuildAssetBundles("Assets/StreamingAssets/", builds, opt, target);
}

这样打包会有问题,会有冗余Texture打到Atlas包中

    builds[0].assetNames = new string[]
    {
        "Assets/ab/atlas/1.png",
        "Assets/ab/atlas/2.png",
        "Assets/ab/atlas/3.png",
        "Assets/ab/atlas/4.png",
        "Assets/ab/index/atlas.spriteatlasv2",
    };

总结

使用SBP打Atlas文件,不要输入原始图集文件,只输入spriteatlasv2即可

否则会有大量冗余的Texturte2D资产被打到AB中,导致文件增加1倍

这在WebGL中问题很大