Blog
Unity Addressables: Reducing Initial Build Size with On-Demand Loading
Unity Addressables let you shrink initial builds, load assets on demand, and support DLC with practical setup and verification steps.
Published by Tasadduq Burney
09 Sept 2025, 19:35 UTC
3 min118.8K views0

h2>The Problem with Packed AssetsIn a traditional Unity build, every sprite, prefab or audio clip that appears anywhere in a scene gets compiled into the player. Even if only a handful of UI icons are needed at startup, the entire asset set inflates the install size, lengthens initial load times, and occupies memory that could be used for gameplay systems. This design choice becomes a bottleneck when you plan downloadable content or frequent updates, because any asset change forces a full rebuild and redistributes the whole player.
Profile: defines base paths for LocalBuild, RemoteLoad and Cache locations.
AsyncOperationHandle: the token that awaits the load result and manages caching and release automatically.
Open the Profiler window (Window → Analysis → Profiler), switch to the Memory tab, and run the build. Observe that the sprite’s memory usage remains low until the LoadAssetAsync call completes, at which point a Texture2D spike appears—confirming on‑demand loading.
Check the Build Report saved to ProjectName/BuildReports/ and compare the total size against a build where the same texture stays in the default Resources folder. You should see a reduction roughly equal to the texture’s size.
If you switch the group’s profile to RemoteLoad, host the generated AssetBundles on a local web server. From a terminal in the BuildAddressableContent folder, run python -m http.server 8080 (or an equivalent simple HTTP server). Ensure the game can download the sprite at runtime without errors, and monitor the Profiler’s Network module to verify the request completes.
Runtime profiling: excessive remote requests can impact frame rate, especially on mobile networks. Use the Profiler’s Addressables module to watch load times, cache hit rates, and request frequency.
Versioning and compatibility: when a new remote bundle is pushed, older clients may still cache the previous version. Implement a version manifest or leverage Unity’s Content Update system to manage compatibility across builds.
The Addressable Solution
Unity’s Addressable Asset System changes this by decoupling an asset’s logical name from its physical location. You assign each asset to an Addressable group, attach a profile that specifies whether the group loads from the local build, a remote server, or a cache, and then request the asset by its address at runtime. The system returns an AsyncOperationHandle that manages caching, reference counting, and automatic release when the handle goes out of scope.Key concepts
Group: a collection of assets sharing the same load profile.A Concrete Code Example
using UnityEngine;
using UnityEngine.Addressables;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;
public class ButtonSpriteLoader : MonoBehaviour
{
[SerializeField] private string address = "ui/button_sprite";
[SerializeField] private Image targetImage;
private AsyncOperationHandle handle;
private void Awake()
{
handle = Addressables.LoadAssetAsync(address);
handle.Completed += OnSpriteLoaded;
}
private void OnSpriteLoaded(AsyncOperationHandle obj)
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
targetImage.sprite = obj.Result;
}
else
{
Debug.LogError("Failed to load sprite: " + obj.OperationException);
}
}
private void OnDestroy()
{
if (handle.IsValid())
{
Addressables.Release(handle);
}
}
}
Verifying the Setup
Build the development player (File → Build Settings → Build). Unity generates AssetBundles for each addressable group in the BuildAddressableContent folder.Trade-offs and Limitations
Setup overhead: you must create groups, assign profiles, and keep the asset-to-group mapping synchronized with your pipeline. Misconfigured groups can lead to duplicate loading or unexpected reference counts.Getting Started Today
Begin with a low-risk asset set—such as a few UI icons or a single prefab—and mark it as Addressable. Build, play, and use the Memory Profiler to confirm that the asset stays out of memory until you explicitly load it. Once the workflow feels comfortable, migrate additional groups, experiment with remote profiles, and start planning your DLC pipeline around the Addressable system.By treating assets as addressable rather than bundled, you gain the flexibility to keep initial installs lean, push content updates without full rebuilds, and ultimately deliver a smoother experience for players.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.