# 1. Addressables Mental Model
Part of [[Addressables]]. Next: [[2. Groups Profiles and Play Mode Scripts]].
> [!note] Verification status
> Concepts match the official 6000.5 Addressables package description and the 2.9.1 manual. **No project was converted for this note.**
## 1.1 The problem it solves
A mid-size game has three bad default habits:
- **Everything is in the scene or a prefab reference.** Memory is "whatever the first scene pulled in," and every change to a hat mesh dirties a huge YAML file ([[Version Control]]).
- **`Resources.Load`.** Convenient, and it forces everything under a `Resources/` folder into the player, with no good incremental update story.
- **Raw AssetBundles.** They work. You also get to own dependency tracking, cataloging, hash files, and the teardown bugs yourself.
Addressables sits on AssetBundles (and, the 6000.5 package page notes, is also compatible with Unity's newer **content directories** system). You mark an asset **Addressable**, give it an **address** (and optional **labels**), and at runtime you load/release through one API. The package tracks dependencies and locations so you can move an asset from local to remote without rewriting call sites.
## 1.2 The words
| Term | Meaning |
|---|---|
| **Address** | The string key you load by. Default is often the asset path; change it to a stable, short name (`characters/hero`, `sfx/footstep-grass`) before you ship. |
| **AssetReference** | A Inspector-friendly field that points at an Addressable asset without loading it. |
| **Label** | A tag you can load as a set (`enemies`, `locale-es`, `chapter-2`). |
| **Group** | A collection of Addressable entries that build together (usually one or more bundles). Pack things that load together. |
| **Schema** | Settings on a group (bundle packing, compression, "include in build", update restrictions). |
| **Profile** | Named path variables: where a **content build** writes files, and where the **runtime** should look (local StreamingAssets vs a remote URL). |
| **Catalog** | The runtime map from address/label to locations and dependencies. The player loads a catalog first, then assets. |
| **Handle** (`AsyncOperationHandle`) | The ticket for an in-flight or completed load. **You release this**, or you leak. |
The player build and the **content build** are different steps. A player without a content build will not find remote (or even some local) Addressables. Part 6 hooks them together.
## 1.3 What should be Addressable
Good candidates:
- Optional characters, weapons, hats, and their icons
- Chapter / location scenes and heavy lighting data you stream ([[SceneManagement in Unity 6]], [[Lighting and Baking]])
- Audio banks and music stems you do not need at boot ([[Audio]], [[Music Mood Mixer]])
- Locale-specific fonts, voice, and table collections ([[Localization]] already uses Addressables under the hood)
- "New items in a patch" content you want to download later
Usually **not**:
- The bootstrapping scene and the tiny boot UI
- A 2 KB ScriptableObject you always need (a direct reference is fine)
- Editor-only assets
A useful rule: if it is not required to show the first frame of the main menu, it can be Addressable.
## 1.4 Teaching analogy
An address is a library call number. A group is a shelf you cart in together. A catalog is the card catalog (or the computer index). A handle is the borrower's card: if you never return it, that volume stays "checked out" in memory. The Memory Profiler will eventually show you the pile ([[3. Memory Profiler Snapshots]]).
## Official docs
- Addressables on 6000.5: https://docs.unity.com/en-us/engine/6000.5/manual/packages-list/packages-all/pack-safe/com-unity-addressables
- Load assets (2.9.1): https://docs.unity3d.com/Packages/
[email protected]/manual/load-assets.html