ASSET.ABDUP001

A shared asset with no bundle assignment is copied into every bundle that uses it

Warning Assets Report only — manual fix

With classic AssetBundles, an asset that isn’t explicitly assigned to a bundle becomes an implicit dependency: the build copies it into every bundle that references it. Two bundles using the same material means two copies; twenty means twenty. Unlike Addressables, there’s no Analyze window that will tell you — the duplication is only visible if you go read the build manifests.

What the scan looks at

Built bundle contents, aggregated per shared asset: how many bundles contain a copy, and the estimated waste. There’s also a project-level summary finding (ASSET.ABDUP000) with the total count and estimated total.

A related case gets its own rule: Unity’s built-in resources (Resources/unity_builtin_extra, Library/unity default resources) get pulled implicitly into every bundle that touches a built-in shader, font or material — reported as ASSET.ABDUP002, one finding per built-in container referenced by two or more bundles. That one surprises people, because nothing in their asset list looks shared.

Why it costs you

  • Download and install size, multiplied by the number of bundles involved.
  • Runtime memory, when two bundles are loaded at once: each carries its own copy of the asset, and they are different objects as far as the engine is concerned. Two copies of the same material don’t batch together, and two copies of a texture occupy VRAM twice.

That second point is the one that bites in profiling: the duplication shows up as unexplained memory and worse batching, not as an obvious size problem.

How to fix it by hand

  1. Assign shared assets to a bundle of their own — a shared or common bundle — so every dependent bundle references it instead of embedding it.
  2. Load the shared bundle first at runtime; dependent bundles will resolve against it.
  3. Rebuild and diff the manifests to confirm the copies are gone. AssetBundleManifest.GetAllDependencies is the check that matters.
  4. For built-in resources specifically: reduce how many bundles reference built-in shaders/fonts/materials, or replace them with your own assets placed in the shared bundle.

What PerfLint does about it

Report-only. Bundle layout is architecture — the right home for a shared asset depends on your loading order and what ships together — so PerfLint quantifies the duplication and names the bundles rather than restructuring your build for you.

If you’re on Addressables rather than classic bundles, the equivalent finding is ASSET.AADUP001, which does have a guided extraction action, because Addressables gives us a safe mechanism (an address) that classic bundles don’t.

Check your own project. The scan is free, runs entirely on your machine, and reports this rule with the exact assets that trip it — nothing is uploaded.

Install the free scanner See a sample report


Last reviewed · All rules