From unity-skills
Asset loading et content management avec Addressables. Organisation des groupes, chargement async, memory management, remote content. Triggers: /addressables, /assets, 'Addressables', 'AssetReference', 'chargement async', 'remote content', 'DLC', 'asset bundles', 'Resources.Load migration', 'loading screen'.
How this skill is triggered — by the user, by Claude, or both
Slash command
/unity-skills:unity-addressablesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Guider l'utilisation du systeme Addressables pour le chargement d'assets asynchrone, l'organisation en groupes, la gestion memoire et le contenu distant (CDN/DLC). Couvre la migration depuis `Resources.Load`, le preloading avec progression, le reference counting et les patterns de release pour eviter les memory leaks.
Guider l'utilisation du systeme Addressables pour le chargement d'assets asynchrone, l'organisation en groupes, la gestion memoire et le contenu distant (CDN/DLC). Couvre la migration depuis Resources.Load, le preloading avec progression, le reference counting et les patterns de release pour eviter les memory leaks.
com.unity.addressables installe via Package ManagerAddressables.LoadAssetAsync<T>Comment charger cet asset ?
|
+-- Toujours en memoire, reference directe dans l'Inspector ?
| --> Reference directe [SerializeField] (pas besoin d'Addressables)
|
+-- Charge a la demande, connu au compile-time ?
| --> AssetReference dans l'Inspector + LoadAssetAsync
|
+-- Charge dynamiquement par label/nom ?
| --> Addressables.LoadAssetsAsync avec label
|
+-- Contenu telechargeable (DLC, patches) ?
| --> Remote group + catalog update
|
+-- Migration depuis Resources.Load ?
--> Marquer les assets comme Addressable, remplacer Resources.Load par LoadAssetAsync
Characters, Levels, UI, AudioCore (inclus dans le build), Optional (telechargeable)level1, boss, tutorial)using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class AssetLoader : MonoBehaviour
{
[SerializeField] private AssetReference prefabRef;
private AsyncOperationHandle<GameObject> handle;
public async Awaitable<GameObject> LoadAndInstantiateAsync()
{
handle = Addressables.LoadAssetAsync<GameObject>(prefabRef);
await handle.Task;
if (handle.Status == AsyncOperationStatus.Succeeded)
return Instantiate(handle.Result);
Debug.LogError($"Failed to load: {prefabRef}");
return null;
}
private void OnDestroy()
{
// CRITIQUE: toujours release le handle
if (handle.IsValid())
Addressables.Release(handle);
}
}
Points cles :
AssetReference dans l'Inspector evite les magic stringsawait handle.Task pour attendre le chargementhandle.Status avant d'utiliser handle.ResultRelease dans OnDestroy pour eviter les leakspublic class LabelLoader : MonoBehaviour
{
[SerializeField] private AssetLabelReference labelRef;
private AsyncOperationHandle<IList<GameObject>> handle;
public async Awaitable<IList<GameObject>> LoadAllAsync()
{
handle = Addressables.LoadAssetsAsync<GameObject>(labelRef, null);
await handle.Task;
if (handle.Status == AsyncOperationStatus.Succeeded)
return handle.Result;
Debug.LogError($"Failed to load label: {labelRef}");
return null;
}
private void OnDestroy()
{
if (handle.IsValid())
Addressables.Release(handle);
}
}
// AVANT (synchrone, tout en memoire au build)
var prefab = Resources.Load<GameObject>("Enemies/Goblin");
// APRES (async, charge a la demande)
var handle = Addressables.LoadAssetAsync<GameObject>("Enemies/Goblin");
await handle.Task;
var prefab = handle.Result;
// ... utiliser prefab ...
Addressables.Release(handle);
Etapes de migration :
Resources/Resources/Resources.Load<T>(path) par Addressables.LoadAssetAsync<T>(address)Release() quand l'asset n'est plus necessaireResources/ une fois la migration termineeusing UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.ResourceProviders;
public class SceneLoader : MonoBehaviour
{
[SerializeField] private AssetReference sceneRef;
private AsyncOperationHandle<SceneInstance> sceneHandle;
public async Awaitable LoadSceneAsync()
{
sceneHandle = Addressables.LoadSceneAsync(sceneRef);
await sceneHandle.Task;
}
public async Awaitable UnloadSceneAsync()
{
if (sceneHandle.IsValid())
{
await Addressables.UnloadSceneAsync(sceneHandle).Task;
}
}
}
Addressables.Release(handle) quand l'asset n'est plus necessaireAssetReference dans l'Inspector (pas de string addresses en dur)handle.Status)Addressables.ReleaseInstance() au lieu de Destroy() pour les objets crees via InstantiateAsyncResources.Load dans un nouveau projet (utiliser Addressables)AssetReferenceT<T> pour typer les references (AssetReferenceGameObject, AssetReferenceSprite, etc.)AssetLabelReference dans l'Inspector plutot que des strings de labels/perf-audit : detecter memory leaks et assets non release/unity-build-config : build content et remote catalog/unity-code-gen : generer loading system et asset managers| Probleme | Solution |
|---|---|
| "InvalidKeyException" | L'address ou le label n'existe pas. Verifier dans Addressables Groups window |
| Memory leak | Oubli de Release(). Utiliser le Profiler Addressables (Event Viewer) |
| Build ne contient pas l'asset | L'asset n'est dans aucun groupe ou le groupe n'est pas inclus dans le build |
| Chargement lent | Groupes trop gros. Splitter en sous-groupes par usage |
| "Cannot instantiate" | L'asset n'est pas un prefab ou le chargement a echoue (verifier Status) |
| "Exception during init" | Addressables pas initialise. Appeler Addressables.InitializeAsync() d'abord |
| Duplication d'assets | Un asset est dans plusieurs groupes. Utiliser le Build Report pour detecter |
| Remote catalog pas a jour | Appeler CheckForCatalogUpdates puis UpdateCatalogs au lancement |
npx claudepluginhub juliankerignard/unity-skillsDefines explicit grouping, loading, update, and fallback rules for Unity Addressables to replace ad hoc content loading. Useful when managing downloadable content, memory, and patching.
Unity scene and asset architecture decisions. Additive scene composition, Addressables vs Resources, AssetReference workflow, asset lifecycle coordination, loading screens. DECISION format: WHEN/DECISION/SCAFFOLD/GOTCHA. Based on Unity 6.3 LTS.
Manages Unity assets: dependency inspection, reference integrity checks, prefab/scriptable-object creation, and package add/remove via the `u` CLI.