Cours 7¶
Le son¶

Fonctions du son¶
| Fonction | Description |
|---|---|
| Rétroaction | Confirme qu'une action a fonctionné (ou non) |
| Ambiance | Installe le lieu et l'émotion |
| Orientation | Guide sans image, ni texte |
| Information | Informe sans image, ni texte |
Bande sonore¶

- Musique : l'émotion de fond, en boucle, discrète
- Ambiance : le lieu (vent, foule, machines)
- SFX (effets sonores) : les actions (sons courts)
-
UI : clics et confirmations des menus (sons très courts et subtiles)
Le silence, une force ou une faiblesse
❌ Placé au mauvais endroit, il peut gâcher l'expérience. Ça évoque souvent le manque de finition.
✅ Placé au bon endroit, il peut amplifier l'expérience ! Par exemple, couper la musique (pas les autres sons) juste avant un combat épique crée une tension très efficace.
Trouver des sons¶

- Freesound : vérifier la licence de chaque son
- Kenney Audio : packs CC0
- Pixabay SFX
Exemples de licences :
| Licence | Ce qu'elle permet |
|---|---|
| CC0 | Tout, sans obligation |
| CC-BY | Tout, à condition de créditer l'auteur |
| CC-BY-NC | Usage non commercial seulement : à éviter pour un jeu publié sur itch.io avec dons |
Chaque son du jeu entre dans le README du répertoire, au moment où on l'importe : voir Les crédits des assets.
L'audio dans Unity¶
- AudioClip : les fichiers audio dans Assets > _ > Audio
- AudioSource : le composant qui joue un clip
-
AudioListener : les « oreilles » vient par défaut avec une caméra
Un seul AudioListener actif à la fois est permis
Ambient Sound & 3D Spatial Audio | Synty Studios
Audio Source¶

| Paramètre d'AudioSource | Effet |
|---|---|
| Audio Generator | Ce que la source joue : un AudioClip glissé du panneau Project ou un Audio Random Container (voir plus bas) |
| Output | Le groupe de l'Audio Mixer où le son est envoyé (voir plus bas) |
| Play On Awake | Joue au démarrage |
| Loop | En boucle : musique, ambiance |
| Volume | 0 à 1. Une musique de fond tourne autour de 0.3 |
| Pitch | Vitesse et hauteur du son |
| Spatial Blend | 2D ou 3D |
Spatial blend¶

- Spatial Blend = 0 (2D) : même volume partout. Musique, UI, voix du narrateur.
- Spatial Blend = 1 (3D) : le son a une position. Le volume baisse avec la distance et le son passe d'une oreille à l'autre.
Dans 3D Sound Settings :
| Réglage | Rôle |
|---|---|
| Doppler Level | 0 = Pas d'effet Doppler |
| Spread | "Largeur" d'un son 3D. Détermine la précision 3D d'un emplacement (ex. 0 = mouche, 130 = rivière) |
| Volume Rolloff | Logarithmic est plus réaliste, mais Linear est plus prévisible techniquement parlant |
| Min Distance | En deçà, le son est à plein volume |
| Max Distance | Au-delà, le son ne baisse plus (ou s'éteint en mode Linear) |


L'effet Doppler

Configuration du clip¶

Cliquer sur un fichier audio dans le panneau Project affiche ses Import Settings dans l'Inspector. Les valeurs par défaut conviennent presque partout. Trois choses à retenir :
- Force To Mono : à cocher pour tout son 3D. Unity le spatialise lui-même, la stéréo d'origine ne sert à rien
- Load Type =
Streamingpour la musique : elle est lue au fur et à mesure au lieu d'occuper la mémoire. Le reste peut rester par défaut - Apply : Ne pas oublier pas de sauvegarder en cliquant Apply dans l'Inspector
Réglages d'optimisation
| Réglage | Rôle |
|---|---|
| Normalize | Remonte le volume après la fusion. Laisser coché |
| Load In Background | Charge le son sans bloquer le jeu, mais il risque de ne pas être prêt au premier Play |
| Ambisonic | Pour les enregistrements 360° (VR). Laisser décoché |
| Preload Audio Data | Charge le son avec la scène. Décoché, il est chargé au premier Play |
| Compression Format | Vorbis (défaut) convient à tout. PCM (aucune compression) sert à optimiser un SFX très court |
| Quality | (Vorbis) 100 = meilleure qualité. Entre 50 et 70, la différence est rarement audible et le fichier fond |
| Sample Rate Setting | Preserve Sample Rate par défaut. Optimize laisse Unity réduire la fréquence si le son le permet |
| Load Type | Mémoire | Usage |
|---|---|---|
Decompress On Load (défaut) |
Lourd, mais aucun calcul pendant le jeu | SFX courts joués souvent |
Compressed In Memory |
Léger, petit calcul à chaque lecture | Ambiances et sons moyens |
Streaming |
Presque rien : lu au fur et à mesure | Musique et longues ambiances |
En bas de l'Inspector, Original Size / Imported Size montre le gain sur le poids du build.
Déclencher un son¶

| Méthode | Quand l'utiliser |
|---|---|
| CES + action Audio | Un son lié à une collision : ramasser, entrer, toucher |
CES + AudioCrossfader |
Un fondu d'une musique à une autre (code fourni plus bas) |
| Script | Un son lié à une logique : vie basse, minuterie, combo |
Avec le CES¶
- Dans la Hierarchy, sélectionner le Trigger Cube
- Dans l'Inspector, composant Collider Event, section Actions : Add Action > Audio
- Dans l'action, assigner le son à jouer
Fondus¶
AudioCrossfader.cs passe d'une trame audio à une autre en fondu enchaîné.
Préparer les ambiances
- Dans la Hierarchy : clic-droit > Create Empty, le nommer (ex. :
Ambiance-Foret) - Dans l'Inspector : Add Component > Audio Source
- Audio Generator : glisser le son d'ambiance depuis le panneau Project
- Play On Awake décoché (le script s'en charge)
- Loop coché
- Volume = Exemple
0.3
- Répéter pour chaque ambiance (ex.
Ambiance-Montages,Ambiance-Pluie)
Ajouter le gestionnaire
- Dans le panneau Project, dossier Assets > _ > Scripts, ajouter AudioCrossfader.cs
- Dans la Hierarchy : clic-droit > Create Empty, le nommer
AmbianceManager - Glisser le script dans son Inspector
- Start Source (optionnel) : on laisse vide normalement
- Fade Duration : durée en secondes d'une transition, en secondes (ex.: 3)
Brancher le CES
- Placer un Trigger Cube
- Dans l'Inspector, Collider Event > Actions > Add Action > Invoke Events, puis cliquer +
- Glisser
AmbianceManagerdepuis la Hierarchy dans le champ objet, puis choisir AudioCrossfader > Play (AudioSource) - Glisser l'ambiance de la zone (ex.
Ambiance-Grotte) dans le champ sous la fonction
Arrêter la piste
Dans le CES, configurer un déclenchement de type Sortie qui appelle AudioCrossfader > Stop ()
Par script¶
Enfin, il est possible d'écrire son propre script de lecture audio.
Méthodes de lecture
Le son est joué par une Audio Source : le script n'a qu'à lui dire quand jouer.
using UnityEngine;
public class JouerSon : MonoBehaviour
{
public AudioSource source; // Glisser l'Audio Source ici
public AudioClip clip; // Optionnel : pour PlayOneShot
public void Jouer()
{
// Joue ce qui est dans Audio Generator (clip ou Audio Random Container)
source.Play();
}
public void JouerParDessus()
{
// Joue un AudioClip par-dessus le son en cours, sans le couper
source.PlayOneShot(clip);
}
}
- Dans le panneau Project, dossier Assets > _ > Scripts : créer le script
JouerSonci-dessus - Dans la Hierarchy, sélectionner l'objet qui porte l'Audio Source (Play On Awake décoché)
- Glisser
JouerSondepuis le panneau Project dans l'Inspector - Dans le champ Source du script, glisser ce même objet depuis la Hierarchy
Humaniser¶
Le même pas joué 10 fois de suite devient vite agaçant 💩
L'Audio Random Container pige au hasard parmi plusieurs clips et peut varier le volume et le pitch !

Exemple : Tir¶
- Dans le panneau Project, dossier Assets > _ > Audio, clic-droit > Create > Audio > Audio Random Container
- Nommer le container
Tir - Double-cliquer sur
Tir - Dans la fenêtre qui s'ouvre,
- Glisser 3 à 5 sons dans Audio Clips
- Trigger =
Manual - Playback Mode =
RandomouShuffle
Pour faire jouer les sons, on les ajoute sur le prefab du projectile.
- Dans le panneau Project, dossier Assets > _ > Prefabs : double-cliquer sur le prefab Bullet (ou peu importe le nom donné). Il va s'ouvrir en mode isolé.
- Dans la Hierarchy, sélectionner « Bullet » (l'Empty Object parent, pas la sphère)
- Dans l'Inspector : Add Component > Audio Source, puis :
- Audio Generator : y glisser l'Audio Random Container
Tir - Play On Awake coché
- Loop décoché
- Spatial Blend =
0(2D)
- Audio Generator : y glisser l'Audio Random Container
- Sauvegarder
- Quitter le mode isolé avec la flèche < en haut de la Hierarchy
À savoir
Chaque projectile a sa propre AudioSource, donc des tirs rapprochés se superposent au lieu de se couper.
Avec le CES¶
Pour un son qui ne vient pas d'un prefab (ex. : un pas sur une plaque, une porte), passer par l'Audio Source qui porte le container (Play On Awake décoché) :
- Dans la Hierarchy, sélectionner le Trigger Cube
- Dans l'Inspector, composant Collider Event, section Actions : Add Action > Invoke Events, puis cliquer +
- Glisser l'objet de l'Audio Source depuis la Hierarchy dans le champ objet, puis choisir AudioSource > Play ()
L'Audio Mixer¶

- Dans le panneau Project, dossier Assets > _ > Audio : clic-droit > Create > Audio Mixer, le nommer
MixerPrincipal
- Double-cliquer sur
MixerPrincipal: la fenêtre Audio Mixer s'ouvre (aussi accessible par Window > Audio > Audio Mixer).
Groupes¶

- La fenêtre Audio Mixer a deux zones : à gauche, une liste en 4 sections (Mixers, Snapshots, Groups, Views); à droite, une bande verticale par groupe (au départ, seulement Master)
- Dans Groups : cliquer sur
Master - Cliquer le + à droite du titre Groups : un nouveau groupe apparaît sous
Master(nom en édition, sinon double-cliquer dessus). Le nommerMusique- Resélectionner
Masteret répéter pourAmbiance,SFXetUI. Chaque groupe ajoute une bande à droite
- Resélectionner
- Sélectionner un objet qui porte une Audio Source (ex. : Bullet)
- Dans l'Inspector, champ Output : cliquer le rond ⊙ à droite et choisir un groupe (ex. : SFX)
- Play
- Dans Audio Mixer, cliquer Edit in Play Mode pour régler les volumes pendant qu'on joue.
Les effets par groupe¶

En bas de chaque bande, sous Attenuation : cliquer Add... et choisir l'effet 
| Effet | Usage |
|---|---|
| Lowpass | Coupe les aigus : son étouffé, sous l'eau, derrière un mur, menu pause |
| SFX Reverb | Écho d'une caverne, d'une cathédrale, d'un couloir |
| Duck Volume | Baisse automatiquement un groupe (ex. musique) quand un autre joue (ex. dialogue) |
Snapshots (contextes)¶

Un snapshot est un réglage spécifique du mixer (volumes et effets) prévu pour des contextes spécifiques. Par exemple, dans un tunel, on veut mettre de la réverbération sur les SFX, ou encore, on veut baisser la musique pendant un dialogue.
- Dans la fenêtre Audio Mixer, à gauche, section Snapshots : double-cliquer sur
Snapshotpour le renommerNormal(l'étoile ★ indique le snapshot de départ du jeu) - Cliquer le + à droite du titre Snapshots pour créer un deuxième snapshot (ex:
Tunnel) - Cliquer sur
Tunneldans la section Snapshots : les réglages faits maintenant n'appartiennent qu'à ce snapshot
Permuter les snapshots¶
Vous entrez dans une caverne et devez ajuster l'audio 🦇
AudioSnapshotSwitcher.cs passe d'un snapshot à un autre avec une transition, depuis le CES ou un bouton, sans écrire de code.
- Dans le panneau Project, dossier Assets > _ > Scripts, ajouter
AudioSnapshotSwitcher.cs - Dans la Hierarchy : clic-droit > Create Empty, le nommer
SnapshotManager - Glisser
AudioSnapshotSwitcherdepuis le panneau Project dans l'Inspector - Start Snapshot (optionnel) : snapshot appliqué au lancement de la scène - Transition Duration : durée d'une transition, en secondes - Sur le Trigger Cube, dans l'Inspector : Add Action > Invoke Events, puis cliquer +
- Glisser
SnapshotManagerdepuis la Hierarchy dans le champ objet, puis choisir AudioSnapshotSwitcher > TransitionTo (AudioMixerSnapshot) - Dans le panneau Project, déplier
MixerPrincipal(petite flèche) pour voir ses snapshots et glisser le snapshot voulu dans le champ sous la fonction

Les crédits des assets¶

Les sons s'ajoutent aux modèles, textures, polices et packs déjà importés. Chaque média externe se note dans le README, au moment où on l'importe.
Dans le README.md, ajouter une section ## Crédits :
| Colonne | Quoi écrire |
|---|---|
| Asset | Nom de l'asset sur le site qui l'héberge |
| Type | Son, musique, modèle 3D, texture, police, script, pack, etc. |
| Auteur | Le pseudo ou le nom tel qu'affiché sur la page de l'asset |
| Source | Le lien direct vers la page de l'asset (pas vers la page d'accueil du site) |
| Licence | La licence exacte, même si c'est CC0 ! |
Exemple
| Asset | Type | Auteur | Licence | Source |
|---|---|---|---|---|
| md1trk22.AIF | Son | alienistcog | CC0 | https://freesound.org/s/123456/ |
| Impact Sounds | Pack son | Kenney | CC0 | https://kenney.nl/assets/impact-sounds |
| Riser Wildfire | Son | SoundReality | Pixabay Content License | https://pixabay.com/sound-effects/film-special-effects-riser-wildfire-285209/ |
| POLYGON Dungeon Pack | Pack 3D | Synty Studios | Humble Bundle Licence | https://syntystore.com/products/polygon-dungeon-pack |
| Press Start 2P | Police | CodeMan38 | SIL OPEN FONT LICENSE Version 1.1 | https://fonts.google.com/specimen/Press+Start+2P |
Projet final
L'écran de crédits du jeu (sera exigé au projet final) reprendra cette liste.
HUD dynamique¶

Points de vie¶
- Dans le panneau Project, dossier Assets > _ > Scripts : ajouter Health.cs
- Dans la Hierarchy : clic-droit > Create Empty, le renommer
HP - Glisser
Healthdepuis le panneau Project dans l'Inspector deHP - Dans la Hierarchy, sur le Canvas : clic-droit > UI (Canvas) > Text - TextMeshPro, le renommer
HP_Text - Sur le Canvas : clic-droit > UI (Canvas) > Image, la renommer
HP_Bar. Dans l'Inspector :- Pivot X =
0, pour que la barre rétrécisse vers la gauche - Optionnel, mais préférable : une image 9-slice dans Source Image, Image Type =
Sliced
- Pivot X =
- Sélectionner
HPdans la Hierarchy. Dans l'Inspector, glisserHP_Textdans Text etHP_Bardans Bar - Régler Maximum et Start Value, puis brancher les événements au besoin :
- On Damaged : un son, un flash rouge
- On Healed : un son, une particule
- On Death : charger la scène de fin ou recommencer le niveau
Un fond pour la barre
Une deuxième Image foncée placée derrière HP_Bar, de la même taille, montre ce qui a été perdu.
Perte
¶
- Dans la Hierarchy, ajouter un Trigger Cube et le renommer
Damage - Dans l'Inspector, composant Collider Event : Add Action > Invoke Events, puis cliquer +
- Glisser
HPdepuis la Hierarchy dans le champ objet, puis choisir Health > Remove (int) et entrer30, par exemple
Gain
¶
- Dupliquer
Damageet le renommerPotion - Remplacer la fonction par Health > Add (int), avec la valeur
50, par exemple
Chrono¶
- Dans le panneau Project, dossier Assets > _ > Scripts : ajouter CountdownTimer.cs
- Dans la Hierarchy : clic-droit > Create Empty, le renommer
Chrono - Glisser
CountdownTimerdepuis le panneau Project dans l'Inspector deChrono - Dans la Hierarchy, sur le Canvas : clic-droit > UI (Canvas) > Text - TextMeshPro, le renommer
Chrono_Text - Sélectionner
Chronodans la Hierarchy. Dans l'Inspector, glisserChrono_Textdans Text -
Régler Duration (en secondes) puis brancher les événements au besoin :
- On Started : un son, une musique plus tendue
- On Warning : le texte passe au rouge, un tic-tac
- On Finished : charger la scène de fin, retirer des points de vie (Health > Remove (int))
Le format
Dans Format,
{0}= minutes,{1}= secondes et{2}= centièmes (optionnel).Format Affichage {0:00}:{1:00}01:05 Temps : {0}:{1:00}Temps : 1:05 {0:00}:{1:00}.{2:00}01:05.42
Départ
¶
Start On Load coché : le chrono part dès le chargement de la scène.
Pour une course contre la montre qui commence à un endroit précis, décocher Start On Load, puis :
- Dans la Hierarchy, ajouter un Trigger Cube et le renommer
Chrono_Start - Dans l'Inspector, composant Collider Event : Add Action > Invoke Events, puis cliquer +
- Glisser
Chronodepuis la Hierarchy dans le champ objet, puis choisir CountdownTimer > StartTimer ()
Arrivée
¶
- Dupliquer
Chrono_Startet le renommerChrono_Stop - Remplacer la fonction par CountdownTimer > StopTimer ()
Bonus et pénalité
¶
- Dupliquer
Chrono_Startet le renommerSablier - Remplacer la fonction par CountdownTimer > AddTime (float), avec la valeur
10pour un bonus, ou-10pour une pénalité
Ressources¶
Ce qu'on accumule et qu'on dépense : pièces, munitions, cristaux.
- Dans le panneau Project, dossier Assets > _ > Scripts : ajouter Resource.cs
- Dans la Hierarchy : clic-droit > Create Empty, le renommer
Coins - Glisser
Resourcedepuis le panneau Project dans l'Inspector deCoins - Dans la Hierarchy, sur le Canvas : clic-droit > UI (Canvas) > Image, la renommer
Coins_Icon, et y glisser l'icône de la ressource dans Source Image - Sur le Canvas : clic-droit > UI (Canvas) > Text - TextMeshPro, le renommer
Coins_Text, à côté de l'icône - Sélectionner
Coinsdans la Hierarchy. Dans l'Inspector, glisserCoins_Textdans Text - Régler Start Value, Maximum (
0= aucune limite) et Goal (0= aucun objectif), puis brancher les événements au besoin :- On Added : un son, une particule
- On Removed : un son
- On Goal Reached : ouvrir un passage, faire apparaître la sortie
- On Insufficient Funds : un son de refus, un message « Il manque des pièces »
Le format
Dans Format, {0} = quantité et {1} = objectif.
| Format | Affichage |
|---|---|
× {0} |
× 3 |
{0} / {1} |
3 / 5 |
Fragments : {0}/{1} |
Fragments : 3/5 |
Ramasser
¶
- Placer l'objet à ramasser (un modèle Synty) et glisser un Trigger Cube comme enfant
- Dans l'Inspector du Trigger Cube, composant Collider Event : Add Action > Invoke Events, puis cliquer +
- Glisser
Coinsdepuis la Hierarchy dans le champ objet, puis choisir Resource > Add (int) et entrer1 - After Trigger = Destroy Parent : l'objet disparaît avec sa zone
- Semer des copies dans le niveau en sélectionnant l'objet dans la Hierarchy et en faisant Ctrl+D (Cmd+D sur Mac)
Dupliquer, pas glisser depuis Project
Une copie faite avec Ctrl+D dans la Hierarchy garde le lien vers Coins. Un prefab glissé depuis le panneau Project, non : un asset ne peut pas pointer vers un objet de la scène. Le champ objet d'Invoke Events arrive alors vide, et il faut y glisser Coins à nouveau.
Dépenser
¶
Une porte, un marchand, un autel qui exige un prix :
- Dans la Hierarchy, ajouter un Trigger Cube et le renommer
Shop - Add Action > Invoke Events, puis choisir Resource > Spend (int) et entrer le prix, par exemple
5 - Sur
Coins, brancher l'effet dans On Removed (ouvrir, faire apparaître) et le refus dans On Insufficient Funds
Spend ou Remove?
Spend est tout ou rien : avec 3 pièces, un prix de 5 ne retire rien et déclenche On Insufficient Funds. Remove retire ce qu'il peut, sans descendre sous 0 : une pénalité, un vol.
Trello¶

- Semaine 7 | 8 octobre : Prototype ⭐️ Aujourd'hui
- Semaine 8 | 22 octobre (👾 Énoncé du projet final)
- Semaine 9 | 29 octobre 🏃🏻♂️ Sprint 2 : Tranche verticale
- Semaine 10 | 5 novembre
- Semaine 11 | 12 novembre
- Semaine 12 | 19 novembre 🏃🏻♂️ Sprint 3 : Alpha
- Semaine 13 | 26 novembre
- Semaine 14 | 3 décembre 🏃🏻♂️ Sprint 4 : Beta
- Semaine 15 | 10 décembre 🏃🏻♂️ Sprint 5 : Oral
Tranche verticale¶
Un segment court, mais terminé 💯
- Scène d'introduction terminée
- Scène Zone 1 terminée : habillée (assets), éclairée (lighting / skybox), animée et sonorisée
- HUD terminé : habillé (assets), animé et sonorisé
- Scènes d'échec et de succès terminées : habillée (assets), animée et sonorisée
- Logique minimale terminée
- Export Windows (le WebGL sera exigé au sprint suivant)
MoSCoW¶

La catégorisation MoSCoW sert à prioriser les tâches : Must, Should, Could, Won't
Si ce n'est pas encore déjà en place, il faudra maintenant prioriser les tâches Trello
Nouvelles cartes¶
Les cartes
mustsont obligatoires pour le projet final. Les autres sont relatives à vos projets.
Général
MustFinaliser le passage de la zone 1 vers la zone 2 et vérifier les trois règles (voir ci-dessous)MustMonter la scène d'introduction (titre, bouton Jouer)MustMonter les scènes d'échec et de succès (boutons Recommencer et Accueil)MustBrancher la défaite (ex. : HP à 0 ou chrono écoulé) vers la scène d'échecMustRecommencer une partie sans relancer le jeuMustHabiller la zone 1 (assets)MustÉclairer la zone 1 (lighting, skybox)MustAnimer au moins un élément de la zone 1MustExporter un build Windows
Les trois règles d'un passage
Chaque passage d'une zone à l'autre est vérifié selon trois règles :
- Thématique : l'obstacle fait partie de l'univers du jeu. Une grille rouillée dans une prison, une rivière en forêt; pas un cube rouge
- Prérequis : le passage exige AU MOINS deux conditions enchaînées et l'interacteur comprend quoi faire. (Ne pas comprendre n'est pas un niveau de difficulté)
- Récompense : franchir le passage ça se mérite, mais ça se célèbre aussi ! (via un son, des particules, une cinématique, un objet qui apparaît, une nouvelle vue, etc.)
HUD
MustTester le HUD à deux résolutions (16:9 et 4:3)MustAfficher des indicateurs de progression (ex. : objets ramassés, clés, nombre de vies)ShouldAfficher un état (ex. : moment dans la journée, hp)ShouldAfficher l'icône d'un objet unique quand on l'obtientCouldAjouter une minuterie à une zone
Son
MustCréer un Audio Mixer dont les groupes sont pensés selon leur usage (ex. : baisser la musique sans toucher aux effets)MustAjouter une ambiance (ou une musique) en boucle dans la zone 1MustAjouter un son spatialisé (source fixe dans le décor)MustAjouter les sons déclenchés par des événements (ramasser, blesser, ouvrir, réussir, échouer)MustAjouter des sons aux boutons des menusShouldAjouter de la variation (pitch ou clips multiples) aux sons répétés (ex. : tir, objets ramassés)CouldAjouter un fondu d'ambiance
Assets et crédits
MustCréer un README.md- Ajouter une section
## Crédits - Noter la source de chaque asset importé (modèles, textures, audio, polices, packs, scripts)
- Ajouter une section
MustChercher les assets visuels manquants (modèles, textures, polices)