Unity Audio
Ce que fait cette skill
Guide la conception et l'implementation d'un systeme audio complet dans Unity 6+. Couvre les SFX avec pooling, la musique avec crossfade, l'ambiance sonore, la spatialisation 3D, les Audio Random Containers (Unity 6+), les AudioMixer snapshots, et introduit le Scriptable Audio Pipeline (Unity 6.3+). Produit du code performant base sur des ScriptableObjects et le pattern event-driven.
Prerequis
- Unity 6.0+ (6.3+ pour Scriptable Audio Pipeline)
- Package Audio par defaut (integre)
- Connaissance basique des AudioSource, AudioClip, AudioMixer
- Skill
/unity chargee (architecture, patterns SO)
Demarrage rapide
- Decrire le besoin : type de son (SFX, musique, ambiance), contexte (2D/3D/VR)
- Suivre l'arbre de decision pour choisir le pattern adapte
- Creer l'AudioManager base sur ScriptableObject + pool de SoundEmitters
- Configurer les import settings selon le type audio (voir
references/audio-optimization.md)
- Tester avec le Profiler Audio et ajuster les volumes via AudioMixer
Arbre de decision
Type de son ?
|
+-- SFX ponctuel (tir, saut, UI click) ?
| +-- Peu de variations --> AudioSource.PlayOneShot + pool
| +-- Variations (footsteps, impacts) --> Audio Random Container (Unity 6+)
|
+-- Musique (BGM, themes) ?
| +-- Un seul theme --> AudioSource loop
| +-- Transitions entre themes --> Crossfade 2 sources
| +-- Musique dynamique --> AudioMixer snapshots
|
+-- Ambiance (vent, foule, pluie) ?
| +-- Globale --> AudioSource loop sur Camera/Manager
| +-- Locale (zone) --> AudioSource 3D + trigger zone
|
+-- Son spatial 3D ?
| +-- Standard --> spatialBlend = 1, Logarithmic rolloff
| +-- VR/AR --> Spatializer plugin (Steam Audio, Resonance)
|
+-- Custom DSP / synthese ?
+-- Unity 6.3+ --> Scriptable Audio Pipeline
Guide etape par etape
Etape 1 : Detecter l'AudioMixer existant
Verifier si un AudioMixer existe dans le projet. Sinon, en creer un avec les groupes :
- Master (volume global)
- SFX (effets sonores)
- Music (musique)
- Ambiance (sons d'ambiance)
- UI (sons d'interface)
Exposer les parametres de volume de chaque groupe (SFXVolume, MusicVolume, etc.).
Etape 2 : Setup AudioManager SO
Creer le systeme base sur ScriptableObjects :
AudioCueSO : contient les clips, plages de volume/pitch, groupe mixer cible
AudioCueEventChannelSO : canal d'evenement pour decoupler les demandes de lecture
AudioManager MonoBehaviour : ecoute le canal, gere le pool de SoundEmitters
Voir references/audio-patterns.md pour l'implementation complete (AudioCueSO, SoundEmitter, pool, crossfade).
Etape 3 : Configurer les import settings
Pour chaque clip audio, appliquer les settings optimaux selon son type :
- SFX courts : Decompress On Load, Vorbis 70%, Force Mono
- Musique : Streaming, Vorbis 50%, Stereo
- Ambiance : Streaming, Vorbis 50%, Force Mono
- UI : Decompress On Load, PCM, Force Mono
Voir references/audio-optimization.md pour le tableau complet.
Etape 4 : Implementer les patterns
Selon l'arbre de decision :
- SFX : pool de SoundEmitters avec auto-return
- Musique : crossfade entre 2 AudioSources via
Awaitable
- Ambiance : AudioSource 3D avec trigger zones
- Spatialisation : configurer rolloff, min/max distance, doppler
- AudioMixer Snapshots : transitions d'ambiance (Combat, Pause, Underwater)
Voir references/audio-advanced.md pour les patterns Mixer snapshots, spatial 3D et Audio Random Container.
Etape 5 : Tester et profiler
- Ouvrir Window > Analysis > Audio Profiler
- Verifier le nombre de voix actives (budget : 32 mobile, 64 desktop)
- Verifier la memoire audio dans le Profiler (onglet Memory > Audio)
- Tester les transitions de snapshots AudioMixer
- Valider la spatialisation 3D en scene avec Gizmos audio
Regles strictes
TOUJOURS :
- Utiliser
PlayOneShot() pour les SFX ponctuels (pas Play())
- Passer par un pool de SoundEmitters (jamais
Instantiate par son)
- Exposer les volumes via
AudioMixer.SetFloat() (pas via AudioSource.volume direct)
- Configurer les import settings AVANT d'utiliser un clip en jeu
- Utiliser
AudioMixerGroup sur chaque AudioSource pour le routing
- Convertir les volumes en dB :
Mathf.Log10(value) * 20f
- Limiter les voix simultanees par categorie (max voices)
JAMAIS :
new AudioClip() ou charger des clips a chaque frame
AudioSource.Play() pour des SFX rapides et superposes
- Oublier de retourner un emitter au pool apres lecture
- Laisser un AudioSource en
Decompress On Load pour un fichier > 500 Ko
- Utiliser
Destroy() sur des GameObjects audio (recycler via pool)
- Ignorer le
spatialBlend (defaut 0 = 2D, souvent oublie pour le 3D)
Skills connexes
/unity-code-gen : generer le code AudioManager, SoundEmitter, AudioCueSO
/proto : prototype rapide avec audio placeholder
/perf-audit : detecter les anti-patterns audio (memoire, voix)
/unity-test : tester les systemes audio en EditMode
Troubleshooting
| Probleme |
Cause probable |
Solution |
| Son ne joue pas |
AudioSource desactivee ou volume a 0 |
Verifier enabled, volume, AudioMixerGroup non mute |
| Son 3D inaudible |
spatialBlend = 0 (mode 2D) |
Mettre spatialBlend = 1 et verifier maxDistance |
| Clic/pop au debut du clip |
Clip mal trimme ou decompression |
Trimmer le silence, utiliser fade-in dans le clip |
| Latence SFX sur mobile |
Streaming sur SFX courts |
Passer en Decompress On Load pour clips < 1s |
| Memoire audio explose |
Tous les clips en Decompress On Load |
Streaming pour musique/ambiance, compresser |
| Crossfade brutal |
Pas de courbe de transition |
Utiliser Mathf.SmoothStep ou courbe logarithmique |
| AudioMixer.SetFloat echoue |
Parametre non expose |
Clic droit sur le param dans l'Inspector > Expose |
| Sons identiques repetitifs |
Pas de variation pitch/volume |
Utiliser Audio Random Container ou randomiser manuellement |
1---2name: unity-audio3description: Systeme audio complet Unity 6+ : SFX, musique, ambiance, spatialisation 3D, AudioMixer, pooling, Audio Random Container, Scriptable Audio Pipeline. Triggers: /unity-audio, /audio, audio, son, musique, AudioMixer, AudioSource, spatial audio, 3D sound, sound design, SFX4---5
6# Unity Audio
7
8## Ce que fait cette skill
9
10Guide la conception et l'implementation d'un systeme audio complet dans Unity 6+. Couvre les SFX avec pooling, la musique avec crossfade, l'ambiance sonore, la spatialisation 3D, les Audio Random Containers (Unity 6+), les AudioMixer snapshots, et introduit le Scriptable Audio Pipeline (Unity 6.3+). Produit du code performant base sur des ScriptableObjects et le pattern event-driven.
11
12## Prerequis
13
14- Unity 6.0+ (6.3+ pour Scriptable Audio Pipeline)
15- Package Audio par defaut (integre)
16- Connaissance basique des AudioSource, AudioClip, AudioMixer
17- Skill `/unity` chargee (architecture, patterns SO)
18
19## Demarrage rapide
20
211. **Decrire le besoin** : type de son (SFX, musique, ambiance), contexte (2D/3D/VR)
222. **Suivre l'arbre de decision** pour choisir le pattern adapte
233. **Creer l'AudioManager** base sur ScriptableObject + pool de SoundEmitters
244. **Configurer les import settings** selon le type audio (voir `references/audio-optimization.md`)
255. **Tester** avec le Profiler Audio et ajuster les volumes via AudioMixer
26
27## Arbre de decision
28
29```
30Type de son ?
31|
32+-- SFX ponctuel (tir, saut, UI click) ?
33| +-- Peu de variations --> AudioSource.PlayOneShot + pool
34| +-- Variations (footsteps, impacts) --> Audio Random Container (Unity 6+)
35|
36+-- Musique (BGM, themes) ?
37| +-- Un seul theme --> AudioSource loop
38| +-- Transitions entre themes --> Crossfade 2 sources
39| +-- Musique dynamique --> AudioMixer snapshots
40|
41+-- Ambiance (vent, foule, pluie) ?
42| +-- Globale --> AudioSource loop sur Camera/Manager
43| +-- Locale (zone) --> AudioSource 3D + trigger zone
44|
45+-- Son spatial 3D ?
46| +-- Standard --> spatialBlend = 1, Logarithmic rolloff
47| +-- VR/AR --> Spatializer plugin (Steam Audio, Resonance)
48|
49+-- Custom DSP / synthese ?
50 +-- Unity 6.3+ --> Scriptable Audio Pipeline
51```
52
53## Guide etape par etape
54
55### Etape 1 : Detecter l'AudioMixer existant
56
57Verifier si un AudioMixer existe dans le projet. Sinon, en creer un avec les groupes :
58- **Master** (volume global)
59 - **SFX** (effets sonores)
60 - **Music** (musique)
61 - **Ambiance** (sons d'ambiance)
62 - **UI** (sons d'interface)
63
64Exposer les parametres de volume de chaque groupe (`SFXVolume`, `MusicVolume`, etc.).
65
66### Etape 2 : Setup AudioManager SO
67
68Creer le systeme base sur ScriptableObjects :
69- `AudioCueSO` : contient les clips, plages de volume/pitch, groupe mixer cible
70- `AudioCueEventChannelSO` : canal d'evenement pour decoupler les demandes de lecture
71- `AudioManager` MonoBehaviour : ecoute le canal, gere le pool de SoundEmitters
72
73Voir `references/audio-patterns.md` pour l'implementation complete (AudioCueSO, SoundEmitter, pool, crossfade).
74
75### Etape 3 : Configurer les import settings
76
77Pour chaque clip audio, appliquer les settings optimaux selon son type :
78- **SFX courts** : Decompress On Load, Vorbis 70%, Force Mono
79- **Musique** : Streaming, Vorbis 50%, Stereo
80- **Ambiance** : Streaming, Vorbis 50%, Force Mono
81- **UI** : Decompress On Load, PCM, Force Mono
82
83Voir `references/audio-optimization.md` pour le tableau complet.
84
85### Etape 4 : Implementer les patterns
86
87Selon l'arbre de decision :
88- **SFX** : pool de SoundEmitters avec auto-return
89- **Musique** : crossfade entre 2 AudioSources via `Awaitable`
90- **Ambiance** : AudioSource 3D avec trigger zones
91- **Spatialisation** : configurer rolloff, min/max distance, doppler
92- **AudioMixer Snapshots** : transitions d'ambiance (Combat, Pause, Underwater)
93
94Voir `references/audio-advanced.md` pour les patterns Mixer snapshots, spatial 3D et Audio Random Container.
95
96### Etape 5 : Tester et profiler
97
98- Ouvrir **Window > Analysis > Audio Profiler**
99- Verifier le nombre de voix actives (budget : 32 mobile, 64 desktop)
100- Verifier la memoire audio dans le Profiler (onglet Memory > Audio)
101- Tester les transitions de snapshots AudioMixer
102- Valider la spatialisation 3D en scene avec Gizmos audio
103
104## Regles strictes
105
106**TOUJOURS :**
107- Utiliser `PlayOneShot()` pour les SFX ponctuels (pas `Play()`)
108- Passer par un pool de SoundEmitters (jamais `Instantiate` par son)
109- Exposer les volumes via `AudioMixer.SetFloat()` (pas via `AudioSource.volume` direct)
110- Configurer les import settings AVANT d'utiliser un clip en jeu
111- Utiliser `AudioMixerGroup` sur chaque AudioSource pour le routing
112- Convertir les volumes en dB : `Mathf.Log10(value) * 20f`
113- Limiter les voix simultanees par categorie (max voices)
114
115**JAMAIS :**
116- `new AudioClip()` ou charger des clips a chaque frame
117- `AudioSource.Play()` pour des SFX rapides et superposes
118- Oublier de retourner un emitter au pool apres lecture
119- Laisser un AudioSource en `Decompress On Load` pour un fichier > 500 Ko
120- Utiliser `Destroy()` sur des GameObjects audio (recycler via pool)
121- Ignorer le `spatialBlend` (defaut 0 = 2D, souvent oublie pour le 3D)
122
123## Skills connexes
124
125- `/unity-code-gen` : generer le code AudioManager, SoundEmitter, AudioCueSO
126- `/proto` : prototype rapide avec audio placeholder
127- `/perf-audit` : detecter les anti-patterns audio (memoire, voix)
128- `/unity-test` : tester les systemes audio en EditMode
129
130## Troubleshooting
131
132| Probleme | Cause probable | Solution |
133|----------|---------------|----------|
134| Son ne joue pas | AudioSource desactivee ou volume a 0 | Verifier `enabled`, `volume`, `AudioMixerGroup` non mute |
135| Son 3D inaudible | `spatialBlend = 0` (mode 2D) | Mettre `spatialBlend = 1` et verifier `maxDistance` |
136| Clic/pop au debut du clip | Clip mal trimme ou decompression | Trimmer le silence, utiliser fade-in dans le clip |
137| Latence SFX sur mobile | `Streaming` sur SFX courts | Passer en `Decompress On Load` pour clips < 1s |
138| Memoire audio explose | Tous les clips en `Decompress On Load` | Streaming pour musique/ambiance, compresser |
139| Crossfade brutal | Pas de courbe de transition | Utiliser `Mathf.SmoothStep` ou courbe logarithmique |
140| AudioMixer.SetFloat echoue | Parametre non expose | Clic droit sur le param dans l'Inspector > Expose |
141| Sons identiques repetitifs | Pas de variation pitch/volume | Utiliser Audio Random Container ou randomiser manuellement |