Addressables System In Unity

Last Updated : 4 May, 2026

Addressables is Unity's system for loading assets from anywhere – local disk or remote server. Instead of storing everything in memory, you load assets on demand.

  • Load levels, characters, or items only when needed
  • Reduce game size and memory usage
  • Update content without rebuilding the whole game

Installing Addressables

  • Window -> Package Manager.
  • Search "Addressables" -> Install.
  • Window -> Asset Management -> Addressables -> Groups.
Addressables-In-Unity
Addressables In Unity

Marking Assets as Addressable

  • Method 1: Select asset in Project window - Check "Addressable" in Inspector.
  • Method 2: Drag asset into Addressables Groups window.

Loading Assets by Address

Load an asset using its address name.

C#
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class AddressableLoader : MonoBehaviour
{
    public string assetAddress = "MyCharacter";
    void Start()
    {
        LoadAsset();
    }
    void LoadAsset()
    {
        Addressables.LoadAssetAsync<GameObject>(assetAddress).Completed += OnAssetLoaded;
    }
    void OnAssetLoaded(AsyncOperationHandle<GameObject> handle)
    {
        if (handle.Status == AsyncOperationStatus.Succeeded)
        {
            GameObject obj = Instantiate(handle.Result);
            Debug.Log("Asset loaded: " + obj.name);
        }
        else
        {
            Debug.LogError("Failed to load asset");
        }
    }
}

LoadAssetAsync() loads the asset in background. Game continues running while loading. Completed event fires when done.

Loading and Instantiating Together

Load and instantiate an asset with one line.

C#
public class Spawner : MonoBehaviour
{
    public string enemyAddress = "Enemy_Goblin";
    void SpawnEnemy()
    {
        Addressables.InstantiateAsync(enemyAddress, transform.position, Quaternion.identity);
    }
}

InstantiateAsync() loads the prefab and creates an instance at specified position and rotation.

Releasing Assets

Important to release assets to free memory.

C#
public class AssetManager : MonoBehaviour
{
    private AsyncOperationHandle<GameObject> handle;
    private GameObject spawnedObject;
    void LoadAndSpawn()
    {
        handle = Addressables.LoadAssetAsync<GameObject>("MyAsset");
        handle.Completed += (op) =>
        {
            spawnedObject = Instantiate(op.Result);
        };
    }
    void ReleaseAsset()
    {
        if (spawnedObject != null)
            Destroy(spawnedObject);
        
        Addressables.Release(handle);  // Release memory
    }
}

Always release assets you no longer need. Otherwise, memory leaks occur.

Loading Scene with Addressables

Load scenes that are marked as Addressable.

C#
public class LevelLoader : MonoBehaviour
{
    public string levelAddress = "Level_Boss";
    public void LoadBossLevel()
    {
        Addressables.LoadSceneAsync(levelAddress, UnityEngine.SceneManagement.LoadSceneMode.Single);
    }
}

Remote Content Delivery (Update without Rebuild)

Addressables can load assets from a server. Update game content without rebuilding the app.

  • Setup: Window -> Asset Management -> Addressables -> Settings
  • Set Remote Load Path to your server URL.
C#
public class RemoteLoader : MonoBehaviour
{
    async void Start()
    {
        await Addressables.InitializeAsync();
        // Check for updates
        var checkHandle = Addressables.CheckForCatalogUpdates();
        await checkHandle.Task;
        if (checkHandle.Result.Count > 0)
        {
            var updateHandle = Addressables.UpdateCatalogs();
            await updateHandle.Task;
            Debug.Log("Content updated!");
        }
    }
}

Addressables Groups

Create groups to organize assets:

  • AlwaysLoaded: UI, player character (load at start)
  • LevelAssets: Props, enemies for current level
  • DLCContent: Optional downloadable content
Comment
Article Tags:

Explore