ASSET.DUP001
Byte-for-byte identical asset files, shipping once each
Unity identifies assets by GUID, not by content. Import the same PNG into two folders — a store asset’s Textures/, your own Art/Shared/ — and you have two unrelated assets that both ship. This accumulates in every project that has ever imported a package, and nothing in the editor points it out.
What the scan looks at
Asset files under Assets/ hashed by content, grouped where the bytes are identical. Byte-for-byte, not “similar”: no perceptual comparison, no re-encoding, so there are no judgement calls about whether two textures are close enough.
Each finding is one duplicate group, with the copies listed and the build size the redundant copies are costing.
Why it costs you
- Build size, directly: n copies of a 4 MB texture is 4(n−1) MB you’re shipping for nothing.
- Runtime memory, when two copies are loaded at once — they’re distinct objects, so the engine loads both.
- Batching, when the duplicates are materials: two identical-but-distinct materials break batches that one material would have kept together.
How to fix it by hand
The order matters, and it’s why this isn’t a one-click operation:
- Pick the copy to keep — normally the one with the most references, or the one in the folder your team treats as canonical.
- Redirect every reference to it: scenes, prefabs, materials, ScriptableObjects, and
.metafiles that carry the GUID. Missing one leaves a dangling reference that only shows up when that scene loads. - Delete the redundant files only after the redirect is verified.
- Commit first. Deleting assets is not undoable through Unity’s undo stack.
Doing this by hand across a large project is a text search-and-replace over GUIDs, which is exactly the kind of task where one missed reference costs an afternoon.
What PerfLint does about it
This is the executable one. Pro’s Merge duplicates action, per group: it redirects every reference across the project to the kept copy — scenes, prefabs, materials, .meta — and then deletes the redundant files.
The constraints are stated up front in the confirmation, because they’re real:
- Asset Serialization must be Force Text. Binary or mixed serialization can’t be rewritten safely, so the action refuses rather than guessing.
- It is irreversible through Unity. Commit to version control first — the confirmation says so, every time.
- You choose which copy to keep; the default is the most-referenced one, and the group listing shows you what’s referencing what.
This is the deliberate design line across the whole tool: settings changes get one-click buttons because they’re reversible, and anything that deletes files asks first and tells you what it’s about to do.
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.
Last reviewed · All rules