Cours 10¶
Les systèmes de particules¶
Un système de particules, c'est une multitude de petits éléments qui naissent, bougent, changent et meurent. Feu, fumée, pluie, poussière, étincelles, magie : tous reposent sur ce principe.
Créer un Particle System¶
- Dans la Hierarchy : clic-droit Visual Effects > Particle System
- Dans la Scene, l'overlay Particles (en bas à droite) permet de rejouer (Restart) l'effet sans lancer le jeu
- Tous les réglages sont dans l'Inspector
Les réglages essentiels¶
Module principal
| Réglage | Rôle |
|---|---|
| Looping | Boucle l'émission. (ex. : Coché = fumée, cécoché = explosion |
| Start Lifetime | Durée de vie d'une particule, en secondes |
| Start Speed | Vitesse d'éjection |
| Start Size | Taille |
| Start Color | Couleur de départ : l'accorder à l'objet ou à l'événement |
| Gravity Modifier | 0 = pas de gravité, 1 = 100% gravité |
| Simulation Space | World (les particules restent derrière un émetteur qui bouge (ex. : traînée de fumée)), Local = les particules suivent l'émetteur |
| Play On Awake | Joue dès l'apparition de l'objet |
| Stop Action | Destroy : une fois la dernière particule morte, le GameObject de l'émetteur se détruit (indispensable pour un effet instancié) |
Autres modules
| Module | Rôle |
|---|---|
| Emission | Combien : Rate over Time (flux continu) ou Bursts (rafale, ex. : 20 particules au temps 0) |
| Shape | D'où : Cone, Sphere, Hemisphere, Circle, Box, etc. |
| Color over Lifetime | Fondu : dans le dégradé, mettre l'alpha de droite à 0![]() |
| Size over Lifetime | La particule grandit (fumée) ou rapetisse (étincelle) |
| Noise | Turbulence : rend le mouvement organique |
| Renderer | Le material et le Render Mode (Billboard par défaut, Stretched Billboard pour des traits) |
Valeurs aléatoires
La flèche ▾ à droite de presque tous les champs offre Random Between Two Constants. Une taille entre 0.1 et 0.3 paraît naturelle; une taille fixe paraît mécanique.
Le material de particules¶
Le material par défaut est neutre, mais on peut personnaliser cela.
- Dans le panneau Project, dossier Assets > _ > Materials : clic-droit Create > Material, le nommer
M_Particule_Add - Dans l'Inspector :
- Shader =
Universal Render Pipeline/Particles/Unlit - Surface Type =
Transparent - Blending Mode =
Additive(lueur, feu, magie) ouAlpha(fumée, poussière) - Base Map : une texture ronde et floue sur fond transparent (PNG)
- Shader =
- Sur le Particle System, module Renderer > Material =
M_Particule_Add
Additif ou alpha ?
En additif, les couleurs s'additionnent : plus les particules se superposent, plus ça brille. Parfait pour la lumière, mais une fumée additive devient blanche. La fumée et la poussière restent en alpha.
Quelques recettes¶
Points de départ à ajuster. Les valeurs a à b se règlent en Random Between Two Constants (flèche ▾ à droite du champ).
Deux réglages qui reviennent
- Le fondu : module Color over Lifetime, le cocher, cliquer sur le dégradé, puis mettre l'alpha de la clé de droite (en haut) à
0. La particule s'efface au lieu de disparaître d'un coup. - Additif ou alpha : module Renderer > Material =
M_Particule_Addpour la lumière, ou un material en Blending ModeAlphapour la fumée et la poussière (ex. : une copie deM_Particule_Add, nomméeM_Particule_Alpha).
Ramassage¶
Une gerbe dorée qui jaillit quand on ramasse un objet.
- Dans la Hierarchy : clic-droit Visual Effects > Particle System, le nommer
FX_Ramassage - Dans l'Inspector, module principal :
- Looping : décoché
- Start Lifetime :
0.5 - Start Speed :
3à5 - Start Size :
0.1à0.2 - Start Color : doré
- Gravity Modifier :
0.5
- Emission : Rate over Time à
0, puis Bursts > + avec Count20 - Shape :
Sphere - Color over Lifetime : fondu
- Renderer > Material :
M_Particule_Add
Poussière de pas¶
Un petit nuage qui se soulève sous les pieds, puis retombe en s'effaçant.
- Dans la Hierarchy : clic-droit Visual Effects > Particle System, le nommer
FX_Poussiere - Dans l'Inspector, module principal :
- Looping : décoché
- Start Lifetime :
0.6 - Start Speed :
0.5à1 - Start Size :
0.2à0.5 - Start Color : la couleur du sol (brun, gris, sable)
- Simulation Space :
World
- Emission : Rate over Time à
0, puis Bursts > + avec Count5 - Shape :
Hemisphere, Radius0.2 - Size over Lifetime : le cocher et choisir une courbe qui monte
- Color over Lifetime : fondu
- Renderer > Material : un material en
Alpha
Appliquer à chaque pas
- Dans le panneau Project, dossier Assets > _ > Scripts : ajouter PoussierePas.cs
- Dans la Hierarchy, glisser
FX_PoussieresousPlayerArmature. Dans l'Inspector : Position0, 0.05, 0, Play On Awake décoché - Sélectionner
PlayerArmature. Dans l'Inspector : Add Component > Poussiere Pas, puis glisserFX_Poussieredans Poussiere
Fumée¶
Une fumée continue qui monte en ondulant, comme une cheminée.
- Dans la Hierarchy : clic-droit Visual Effects > Particle System, le nommer
FX_Fumee - Dans l'Inspector, module principal :
- Looping : coché
- Start Lifetime :
3à4 - Start Speed :
0.5à1 - Start Size :
1à2 - Start Color : gris
- Emission : Rate over Time à
10 - Shape :
Cone, Angle10 - Noise : le cocher, Strength
0.3 - Size over Lifetime : le cocher et choisir une courbe qui monte
- Color over Lifetime : fondu
- Renderer > Material : un material en
Alpha
Étincelles¶
Des traits lumineux qui jaillissent et retombent, comme sur une enclume.
- Dans la Hierarchy : clic-droit Visual Effects > Particle System, le nommer
FX_Etincelles - Dans l'Inspector, module principal :
- Looping : décoché
- Start Lifetime :
0.3 - Start Speed :
5à10 - Start Size :
0.05 - Start Color : orangé
- Gravity Modifier :
1
- Emission : Rate over Time à
0, puis Bursts > + avec Count15 - Shape :
Cone, Angle25 - Renderer :
- Render Mode :
Stretched Billboard(la particule s'étire dans le sens du mouvement) - Material :
M_Particule_Add
- Render Mode :
Portail / halo¶
Un anneau de lumière qui tourne sur lui-même.
- Dans la Hierarchy : clic-droit Visual Effects > Particle System, le nommer
FX_Portail - Dans l'Inspector, Transform : Rotation
0, 0, 0pour un anneau vertical - Module principal :
- Looping : coché
- Start Lifetime :
2 - Start Speed :
0 - Start Size :
0.2 - Start Color : bleuté
- Emission : Rate over Time à
20 - Shape :
Circle, Arc360, Radius Thickness0(pour que les particules naissent sur le contour) - Velocity over Lifetime : le cocher, Orbital Z
1 - Color over Lifetime : fondu
- Renderer > Material :
M_Particule_Add
Libellules (ambiance)¶
Des petites lueurs qui errent dans une zone, en continu. Elles sont juste là pour habiter le décor. Rapides elle évoque la braise, lente le calme.
- Dans la Hierarchy : clic-droit Visual Effects > Particle System, le nommer
FX_Libellules - Dans l'Inspector, Transform : Rotation
0, 0, 0 - Module principal :
- Looping : coché
- Prewarm : coché (la zone est déjà peuplée au chargement)
- Start Lifetime :
4à6 - Start Speed :
0à0.2 - Start Size :
0.05à0.12 - Start Color : Random Between Two Colors, un vert-jaune et un jaune
- Simulation Space :
World - Max Particles :
40
- Emission : Rate over Time à
6 - Shape :
Box, Scale14, 2, 3(la zone de vol) - Noise : le cocher, Strength
1, Frequency0.6, Scroll Speed0.4. C'est ce module qui donne le vol erratique. - Color over Lifetime : le cocher; dans le dégradé, quatre clés d'alpha :
0au début,255à 20 %,255à 80 %,0à la fin. La lueur apparaît et disparaît en douceur. - Renderer > Material : un material additif à texture ronde
Déclencher un système de particule¶
Un effet ponctuel (éclat, poussière, étincelles) devient un prefab.
- Sur le Particle System : Looping décoché, Play On Awake coché, Stop Action =
Destroy - Le glisser de la Hierarchy vers Assets > _ > Prefabs (préfixe conseillé :
FX_), puis le supprimer de la Hierarchy
Avec le CES¶
- Dans la Hierarchy, sélectionner le Trigger Cube (ex. : celui d'une pièce d'or à ramasser par exemple)
- Dans l'Inspector, composant Collider Event > Actions : Add Action > Instantiate Prefab
- Glisser le prefab
FX_depuis le panneau Project
Pour un effet qui démarre et s'arrête (fumée d'une machine, halo d'un objectif), laisser le Particle System dans la scène, désactivé, puis l'activer avec l'action CES GameObject > Enable.
Le Trail Renderer¶
Le Trail Renderer dessine un ruban derrière un objet en mouvement. Il mémorise les dernières positions de l'objet et les relie par une bande qui s'efface avec le temps.
- Sélectionner l'objet qui bouge. Dans l'Inspector : Add Component > Trail Renderer
- Width : la courbe rouge règle la largeur, du début de la traînée (à gauche, collé à l'objet) jusqu'à sa fin (à droite). Clic-droit sur la ligne rouge > Add Key pour ajouter une deuxième clé à droite, puis la tirer vers le bas pour que la traînée s'amincisse jusqu'à rien

- Time =
0.2: la durée de vie de chaque point, donc la longueur de la traînée - Min Vertex Distance =
0.1: la distance minimale entre deux points du ruban. Plus la valeur est élevée, plus c'est performant, mais moins la courbe est lisse - Materials : glisser par exemple
M_Particule_Addcréé plus tôt - Color : clic sur la couleur et configurer un dégradé

Décocher Emitting arrête la traînée sans la faire disparaître d'un coup : le ruban existant finit de s'effacer. Pratique pour une traînée qui n'apparaît que pendant un dash.
How to Create Trail Renderer in Unity | BudGames
Le game feel¶

Imagine, deux jeux aux mécaniques identiques :
- Ramasser une pièce la fait disparaître en silence
- Dans le second, elle éclate en particules, le compteur fait pop et un ding retentit.
Même code, même design, mais le second est plus stimulant. Cet écart s'appelle le game feel, ou juice.
Le game feel c'est les réponses immédiates, multiples, légèrement exagérées qui fait que le joueur ne fait pas que savoir que l'action a réussi, il le ressent.
La boîte à outils¶
| Outil | Effet |
|---|---|
| Particules | Éclat, poussière, étincelles |
| Traînée | Le mouvement laisse un sillage |
| Variation sonore | Le son répété ne sonne jamais pareil |
| Screen shake | Le monde « encaisse » l'impact |
| Hit stop | Une micro-pause donne du poids à l'impact |
| Pop d'échelle | Un objet ou un chiffre du HUD grossit brièvement |
| Post-traitement | Bloom sur un material émissif, vignette au danger |
Le screen shake¶
Cinemachine produit la secousse avec deux composants qui communiquent entre eux :
- l'Impulse Source, placé sur l'objet qui cause le choc, émet une impulsion;
- l'Impulse Listener, placé sur la caméra, la reçoit et fait trembler l'image.
Aucun lien à faire entre les deux : toute caméra munie d'un listener réagit aux impulsions de toutes les sources de la scène.
1. La caméra reçoit la secousse
- Dans la Hierarchy, sélectionner PlayerFollowCamera
- Dans l'Inspector : Add Component > Cinemachine Impulse Listener
- Gain :
0.2(le choc ne garde qu'une petite poussée)
- Gain :
- Déplier Reaction Settings :
- Secondary Noise :
6D Wobble - Amplitude Gain :
4 - Frequency Gain :
2 - Duration :
0.5
- Secondary Noise :

2. L'objet émet le choc
- Dans la Hierarchy, sélectionner l'objet qui provoque la secousse (ex. : un Trigger Cube)
- Dans l'Inspector : Add Component > Cinemachine Impulse Source
- Impulse Type :
Uniform(valeur par défaut : la secousse est ressentie partout, peu importe la distance) - Impulse Shape :
Explosion, et0.4dans le champ s à droite (la durée du choc) - Default Velocity :
0, -0.5, 0(sa force règle l'intensité de la vibration)
- Impulse Type :

3. Le déclencheur
- Sur le même Trigger Cube, composant Collider Event > Actions : Add Action > Invoke Events, cliquer +
- Glisser l'objet qui porte l'Impulse Source, puis choisir CinemachineImpulseSource >
GenerateImpulse ()
Le hit stop¶
Au moment de l'impact, le jeu ralentit presque jusqu'à l'arrêt pendant une fraction de seconde, puis repart. Presqu'imperceptible, l'impact paraît soudain beaucoup plus lourd.
Time.timeScale règle la vitesse à laquelle le temps s'écoule dans Unity (1 = vitesse normale, 0 = temps figé).
using System.Collections;
using UnityEngine;
public class HitStop : MonoBehaviour
{
public float vitesse = 0.1f; // Vitesse du jeu pendant l'impact (0 = image figée)
bool enCours = false;
public void Geler(float duree)
{
// Ne rien faire si un gel est déjà en cours ou si le jeu est en pause
if (enCours || Time.timeScale == 0f) return;
StartCoroutine(Pause(duree));
}
IEnumerator Pause(float duree)
{
enCours = true;
Time.timeScale = vitesse;
yield return new WaitForSecondsRealtime(duree); // Temps réel : le temps du jeu est ralenti
Time.timeScale = 1f;
enCours = false;
}
}
- Dans la Hierarchy : clic-droit Create Empty, le nommer
GameFeel, y ajouterHitStop - Sur le Trigger Cube, Actions : Add Action > Invoke Events, cliquer +
- Glisser
GameFeel, choisir HitStop > Geler (float) et entrer par exemple0.1
Le pop d'échelle¶
Le clip
Un pop efficace est court, part vite et ralentit à l'arrivée (ease out)
- Créer un clip d'animation
Popsur l'objet ou le texte du HUD -
Placer les keyframes suivantes. La Scale grossit d'un coup, la Rotation Z oscille comme un ressort :
Suggestion de configuration
Temps Scale Rotation Z 0100.05-70.081.30.1240.310
-
Dans le panneau Project, sélectionner le clip
Pop. Dans l'Inspector, décocher Loop Time
La machine à états
- Dans l'Animator : clic-droit Create State > Empty, le nommer
Rien, puis clic-droit surRien> Set as Layer Default State. Sans cet état vide, le pop jouerait dès le lancement du jeu. - Onglet Parameters : + > Trigger, le nommer
pop - Clic-droit sur Any State > Make Transition, puis cliquer sur
Pop - Sélectionner la transition. Dans l'Inspector :
- Has Exit Time : décoché
- Déplier Settings : Transition Duration à
0, Can Transition To Self coché - Conditions : +, choisir
pop
À la fin du clip, l'objet reste dans l'état Pop, à l'échelle 1. Can Transition To Self permet de relancer le pop à chaque ramassage, même s'il est déjà en cours.

Le déclencheur
- Sur le Trigger Cube, composant Collider Event > Actions : Add Action > Animation
- Glisser l'objet animé dans Target, puis Trigger Name =
pop
Trello¶

- Semaine 1
- Semaine 2
- Semaine 3
- Semaine 4
- Semaine 5
- Semaine 6
- Semaine 7 | Prototype
- Semaine 8
- Semaine 9 | Tranche verticale
- Semaine 10 | 🗓️ Aujourd'hui
- 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
Nouvelles cartes¶
Rétroaction
MustCréer le signal de réussite (son, particule, HUD)MustCréer le signal d'échec (son, particule, HUD)MustCréer un système de particules lié à un événement du jeu (pas celui d'un asset importé)MustAjouter une rétroaction à l'approche des objets interactifs (surbrillance, son ou animation)ShouldAjouter un pop d'échelle à un indicateur du HUD quand sa valeur change
Ambiance
ShouldAjouter des particules d'ambiance dans au moins une zone (fumée, lucioles, poussière en suspension)
Game feel
CouldAjouter un screen shake sur un impact important (dégât, chute, explosion)CouldAjouter un hit stop sur un coup donné ou reçu (jeux avec combat)CouldAjouter une traînée (Trail Renderer) à un objet en mouvement (projectile, dash)
Interface
MustRemplacer la police par défaut d'Unity par une police personnaliséeMustIntégrer une image configurée en Sprite (2D and UI), dans l'interface ou dans le jeu