Cut Your Unity Build Size in Half Without Losing Art Quality
Build size costs you installs, and most of it is import settings rather than art. Here is how to find what is actually large and halve it without anyone seeing the difference.

Most oversized Unity builds are large because of import settings, not art. Textures shipped at source resolution, uncompressed audio, unstripped engine code, and unused shader variants usually account for the bulk. Fixing those four is invisible to players and routinely halves a build.
Why this matters
Install size affects conversion directly. Every extra megabyte gives someone on a slow connection or a full phone another reason to abandon the download.
Mobile stores also enforce thresholds above which users are pushed to wait for a better connection. Crossing one of those lines quietly costs installs you never see in the funnel.
Size affects your own iteration too. Larger builds are slower to make, slower to upload, and slower to get onto a test device.
Find what is actually big
Guessing wastes days. Unity tells you exactly where the size went.
Build the project, then open the Editor log and find the build report at the end. It lists assets by size and by percentage of the total.
- Sort by size and look only at the top twenty entries.
- Group them mentally into textures, audio, meshes, and code.
- Note anything you did not expect to be in the build at all.
That last point catches more than people expect. Unreferenced assets in a Resources folder ship whether or not anything uses them.
The top twenty assets usually account for most of the excess. Fix those before touching anything else.
Texture compression by platform
Textures are almost always the largest category, and almost always the easiest win.
Work through these in order.
- Set a maximum size per texture. Most UI and prop textures do not need their source resolution on a phone screen.
- Use a compressed format per platform. ASTC on Android and iOS covers the modern device range well.
- Turn off mipmaps for anything that never scales, particularly UI, which cuts a third off those textures.
- Disable Read/Write Enabled unless something reads the pixels, since it keeps a second copy.
- Atlas small sprites. Dozens of tiny textures waste space in padding alone, and atlasing helps draw calls too.
Quality loss here is far smaller than founders fear. A texture at half resolution on a phone screen is usually indistinguishable at arm's length.
Audio import settings people forget
Audio is the most commonly ignored category and frequently the second largest.
Different sounds want different settings, which is why a single global change rarely works.
| Sound type | Load type | Compression |
|---|---|---|
| Short effects | Decompress on load | Compressed in build, moderate quality |
| Repeated effects | Compressed in memory | Compressed, lower quality is fine |
| Music and long loops | Streaming | Compressed, higher quality |
| Voice or narration | Streaming | Compressed, tuned by ear |
Two extra settings matter. Force To Mono halves the size of anything that does not need stereo, which includes most effects on a phone. Lowering the sample rate on effects is usually inaudible through a phone speaker.
Stripping engine code and IL2CPP settings
Code size is invisible in the asset report and can be a large share of the total.
- Use IL2CPP as the scripting backend, which is required on modern targets anyway.
- Set managed stripping to a higher level and test carefully, since aggressive stripping can remove code reached only by reflection.
- Add a link.xml to preserve anything stripping removes incorrectly, rather than lowering the level globally.
- Remove unused packages from the package manifest. Packages pull in code even when barely used.
- Turn off unused modules in the player settings, such as physics modules a 2D game never touches.
Shader variants deserve their own mention. An unconstrained shader can compile an enormous number of variants, all shipped. Restricting keywords and stripping unused variants often removes a surprising amount, and improves load time as well.
Addressables and on-demand delivery
Once the basics are done, the next lever is not shipping everything at once.
Addressables let you move content out of the initial build and fetch it when needed. Level packs, cosmetic sets, and later-stage content are natural candidates.
The trade is real complexity, so it is worth being deliberate about when to take it on. We compare the options in Addressables or Asset Bundles.
Both stores also support delivery mechanisms that keep the initial download small while the rest arrives in the background. These are worth using once your content volume genuinely justifies them, and worth avoiding while it does not.
A realistic target size by genre
Targets should come from your audience rather than a general rule.
- A simple arcade or puzzle title should be small enough that the download is never a consideration, which usually means keeping it well under the store's warning threshold.
- A casual game with substantial art and progression can reasonably sit higher, provided the initial download stays under that threshold and the rest streams.
- A game targeting markets with expensive data should treat size as a primary design constraint, not a late optimisation.
Set the number in week one and track it per build. Size creeps back the moment nobody is watching it.
What we would do
Run the build report before the first external test, not before launch. Size problems found late are usually architectural, and architectural fixes are expensive.
Fix in this order: texture maximum sizes, audio import settings, unreferenced assets, then code stripping. That order gives the largest reductions for the least risk, and none of it changes the game.
Then add a size check to whatever produces your builds, so a build that crosses the target is visible immediately rather than three weeks later.
The short version
- The Editor log build report tells you exactly where the size went, so start there.
- Texture maximum size, compression format, and mipmap settings are the biggest safe wins.
- Audio needs per-type import settings, and Force To Mono is close to free.
- IL2CPP plus managed stripping and shader variant stripping cut real code size.
- Addressables help once content volume genuinely justifies the complexity.
- Set a size target in week one and check it on every build.
Pull your build report today and look at the top twenty assets. If the number is worse than you expected and you would like help, send us the project.
Related reading: Unity Mobile Performance, Shipping on Android, and Nine Unity Packages That Are Worth the Import.
Got a game idea? We build it.
You bring the concept. We design, build, test and launch it, and you own 100% of the finished game.
Share Your Game Idea →