Quick answer: Move shared assets (textures, materials, fonts) to a dedicated “Common” bundle. Bundles that reference them now load the shared bundle instead of duplicating. Use Addressables Analyze → Check Duplicate Bundle Dependencies to find offenders.
Total bundle size is 600 MB but unique asset content is 200 MB. A few materials and textures are duplicated into many bundles because they have no bundle assignment of their own.
The Symptom
Build size larger than expected. Profiler shows the same Material loaded twice (different memory). Bundle file inspector reveals duplicated Texture2D within multiple .bundle files.
The Fix
Step 1: Audit. In Addressables, Window → Asset Management → Addressables → Analyze. Run “Check Duplicate Bundle Dependencies.” Lists every asset duplicated across bundles.
Step 2: Move shared assets to a Common group. Drag duplicated assets into a new Group named Common. Set Bundle Mode = Pack Together so all common assets ship in one file.
Step 3: Re-build. Build > New Build. Bundles that reference the shared asset now reference the Common bundle. No duplication.
Without Addressables (Legacy)
// Programmatic dependency check
var deps = AssetDatabase.GetDependencies("Assets/Prefabs/Enemy.prefab");
foreach (var path in deps)
{
var bundle = AssetImporter.GetAtPath(path).assetBundleName;
Debug.Log($"{path} -> {bundle}");
}
Run for each prefab; cross-reference manually to spot bundle-less common deps.
Shaders
Shaders are common offenders. Always pull all shaders used in bundles into a single Shaders group with Pack Separately = false. They’re small, but ten copies of URP_Lit add up.
Verifying
Build, sum all bundle sizes, compare to unique on-disk asset size. They should be close. Re-run Analyze; the duplicate list should be empty.
“Common bundle for shared. Analyze for duplicates. Total size shrinks to unique.”
Related Issues
For incremental rebuild, see incremental rebuild. For Addressables handle leak, see handle leak.
Common bundle. Audit. Build shrinks.