# 5. Scenes Catalogs and Remote Content
Part of [[Addressables]]. Previous: [[4. Labels and Loading Many Assets]]. Next: [[6. Content Builds Updates and CI]].
> [!note] Verification status
> `Addressables.LoadSceneAsync` and `UnloadSceneAsync` are documented in Addressables 2.9.1 ("Load scenes", `LoadSceneAsync` API). Catalogs and remote load paths are core product concepts. **Cloud Content Delivery (CCD) setup was not performed**; treat remote hosting here as an orientation, and follow Unity's current CCD docs when you actually open a bucket. **Code not compiled in Unity.**
## 5.1 Load a scene by address
Addressable scenes are how you stream a location without putting every scene in the player Build Profile list. (The boot scene still belongs in the Build Profile.)
```csharp
using System.Collections;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.SceneManagement;
public sealed class LoadHarborScene : MonoBehaviour
{
public string address = "scenes/harbor";
AsyncOperationHandle<SceneInstance> _handle;
public IEnumerator LoadAdditive()
{
_handle = Addressables.LoadSceneAsync(address, LoadSceneMode.Additive);
yield return _handle;
if (_handle.Status != AsyncOperationStatus.Succeeded)
{
Debug.LogError("Scene load failed: " + address);
yield break;
}
Scene scene = _handle.Result.Scene;
SceneManager.SetActiveScene(scene);
}
public IEnumerator Unload()
{
if (!_handle.IsValid()) yield break;
var unload = Addressables.UnloadSceneAsync(_handle);
yield return unload;
}
}
```
`LoadSceneAsync` returns `AsyncOperationHandle<SceneInstance>`. Unload with `Addressables.UnloadSceneAsync`, not only `SceneManager.UnloadSceneAsync`, so the catalog can release the bundle. Pair this with the additive-load thinking in [[SceneManagement in Unity 6]] and [[Level Manager]]: one bootstrap scene, streamed locations, a single place that owns the current handle.
For a loading screen, the handle exposes download and percent-complete information (the 2.9 operations manual covers the exact properties). If you read `PercentComplete`, do not teach it as a linear "megabytes left" guarantee — it is progress of the operation, including dependencies.
## 5.2 The catalog is the map
On startup, Addressables initializes and loads a **content catalog** (or several, if you have extensions). The catalog tells the runtime where each address currently lives (local file, remote URL, hash). If the catalog and the files disagree, you get missing-asset failures that look like typo'd addresses.
Initialization can be automatic on first use, or you can wait explicitly (useful before a language-select screen, and Localization already has to wait on its own initialization — [[5. Language Menu Saving and Runtime Scripting]]). Do not load gameplay content before initialization has finished.
## 5.3 Remote content, carefully
A **remote load path** on an Addressables profile points at a web server or a content service. Unity's first-party option is **Cloud Content Delivery (CCD)**; `CCD Management` is a released package on 6000.5, and the Addressables profile UI can be set up to talk to it. Other studios host the files on any HTTPS bucket the player can reach.
For a first class or a Quest lab:
- **Stay local.** Pack groups as local, ship them in the player, skip network failure modes entirely.
- When you do go remote, start with *optional* cosmetics, not the first gameplay scene.
- Handle a failed load: a timeout, a 404 after a bad catalog publish, a headset with no wifi. Show a retry, do not deadlock the boot flow.
- Quest / mobile data and storage budgets are real ([[6. Quest Performance Budgets]]). A 2 GB remote catalog is not a feature.
This note does not walk CCD bucket creation or badge publishing — those screens change, and they need a Unity Dashboard project. When you need them, open Unity's current CCD + Addressables documentation and write the URLs into the Addressables profile, then **Use Existing Build** in Play Mode before you trust a Player.
## Official docs
- Load scenes (2.9.1): https://docs.unity3d.com/Packages/
[email protected]/manual/LoadingScenes.html
- LoadSceneAsync API (2.9.1): https://docs.unity3d.com/Packages/
[email protected]/api/UnityEngine.AddressableAssets.Addressables.LoadSceneAsync.html
- [[SceneManagement in Unity 6]]