Using Unity Addressables to Load Assets On Demand and Update Content After Launch
Learn how Unity's Addressable Asset System lets you load assets on demand, reduce build size, and update content after release with a concrete loading example and verification steps.
23 Dec 2025, 00:49 UTC

The problem: bloated builds and static content
When a Unity project grows to include hundreds of textures, models, audio clips, and UI prefabs, the default workflow bundles everything into the player build. This leads to large install sizes, long startup times, and makes it impossible to change or add content without shipping a new binary.
Thesis: Addressables decouple asset references from scenes, enable on‑demand loading, and simplify post‑release updates
By marking assets as addressable, Unity creates separate asset bundles that can be loaded by a string key or a typed reference at runtime. The system also generates a catalog that tells the player where each bundle lives, allowing developers to host bundles on a CDN and update them without recompiling the game.
Core concepts: groups, labels, bundles, and the catalog
- Groups – Logical containers in the Addressables window where you place assets that should be built together.
- Labels – String tags you assign to assets or groups; they serve as the lookup keys used in code.
- Asset bundles – The output of the Addressables build process; each bundle contains one or more assets and their dependencies.
- Catalog – A small JSON file generated alongside the bundles that maps labels (or addresses) to bundle names and hash values. The runtime uses the catalog to locate and verify the correct bundle.
Typical workflow
- Open the Addressables window (
Window > Asset Management > Addressables > Groups). - Create a group (e.g.,
Characters) and drag the prefab you want to load on demand into it. - Assign a label to the asset, such as
Characters/Hero. - Click
Build > New Build > Default Build Scriptto generate the bundles and catalog. - In a script, load the asset asynchronously:
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class HeroLoader : MonoBehaviour
{
private void Start()
{
Addressables.LoadAssetAsync("Characters/Hero").Completed += handle;
}
private void handle(AsyncOperationHandle op)
{
if (op.Status == AsyncOperationStatus.Succeeded)
{
Instantiate(op.Result);
}
else
{
Debug.LogError("Failed to load hero prefab: " + op.OperationException);
}
// Release the handle when you no longer need the asset
Addressables.Release(op);
}
}
The code above runs in the Unity Editor or a built player. The string "Characters/Hero" is the address (label) that the Addressables system resolves to the correct bundle at runtime.
Worked example: loading a character prefab from a remote CDN
Assume you have hosted the generated AssetBundles folder and the catalog.json on a CDN at https://cdn.example.com/game/assets/. In the Addressables window, set the Remote Load Path to that URL and the Local Load Path to Application.streamingAssetsPath (so the editor works locally). At runtime, the system will:
- Download the catalog from the CDN.
- Check the hash of each bundle; if a bundle is missing or outdated, it downloads it.
- Resolve the address
Characters/Heroto the appropriate bundle. - Load the prefab and instantiate it.
No changes to the game code are required when you add a new character prefab; you simply rebuild the Addressables upload, place the new bundles on the CDN, and update the catalog.
Trade‑off / limitation: build‑time complexity and memory management
Setting up Addressables introduces an extra step in the build pipeline. If groups are not organized carefully, you can end up with duplicate assets across bundles, increasing download size. Moreover, keeping many loaded assets referenced without calling Addressables.Release will cause memory to grow unchecked.
Practical check: after a build, open the Addressables window and inspect the Build > Bundle Overview pane. It shows each bundle’s size and lists the assets it contains. Look for the same asset appearing in multiple bundles—if you see duplicates, consider moving shared assets to a dedicated group or using Addressables.MergeMode settings.
Verification steps
- In the Editor, play the scene and open the Profiler (
Window > Analysis > Profiler). Watch theMemorymodule while loading and releasing assets to confirm that memory rises on load and drops afterRelease. - Check the Console for any Addressables errors; a missing bundle will appear as
Failed to download bundlewith a URL. - For remote builds, host the output on a test server, point the
Remote Load Pathto that server, and verify that the game starts, downloads the catalog, and instantiates the prefab without manual intervention.
Actionable closing
Start small: mark a single frequently‑used prefab as addressable, build, and test the load/release cycle in the Editor. Once the workflow feels comfortable, expand to larger groups and experiment with remote hosting. The payoff is smaller initial downloads, faster load times, and the ability to push new content to players without a full patch.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.