Skip to content

Best practices ​

Release every load you own ​

Pair every Load* / Instantiate* / LoadScene* with a matching Release / ReleaseInstance / UnloadSceneAsync on the same handle when the content is no longer needed.

Prefer OnDestroy or explicit shutdown paths over relying on scene unload.

Scene transitions ​

Before LoadSceneMode.Single, release handles tied to the outgoing scene. Watch for red SceneSurvivor in Live Leaks during level transition testing.

Startup preloads ​

Long-lived boot assets are valid — mark them with [AddressablesIntentionallyPersistent] so the team knows they are intentional.

Use instrumented overloads ​

  • Prefer UnloadSceneAsync(AsyncOperationHandle<SceneInstance>) over SceneInstance overload.
  • Prefer Addressables.ReleaseInstance over AssetReference.ReleaseInstance(GameObject) for automatic tracking.

CI / team workflow ​

  • Add a Play Mode test or manual checklist: enter Play, exercise Addressables flows, confirm Live Leaks empty after teardown.
  • Run demo scene acceptance checklist after package upgrades.

Verbose mode ​

Enable Verbose only when debugging origin confusion — disable for daily profiling.

Assembly hygiene ​

Exclude only assemblies you truly cannot instrument. Over-excluding hides leaks in gameplay code.

Complement, not replace, Memory Profiler ​

Live Leaks shows missing Release at call sites. Memory Profiler shows what is retained. Use both.

Package upgrades ​

After upgrading Addressables or this package:

  1. Re-run import checklist
  2. Re-run demo acceptance checklist
  3. Check Supported versions

Addressables Leak Detector — Unity Editor documentation