Auteur : Saddik Amine
Chapitre 3 TD7 - Hisser le drapeau
1. Contexte et objectifs
Dans ce TD, l’objectif est de simuler un drapeau soumis à la gravité puis au vent à l’aide du moteur physique de Unity.
L’atelier se déroule en plusieurs étapes : création d’un mât (un cube étiré), ajout d’un plan pour représenter le drapeau, conversion de ce plan en tissu (Cloth), ancrage des sommets au mât, puis définition d’accélérations externes et aléatoires pour générer un vent.
2. Mise en place du drapeau
- Création du mât : un cube est ajouté à la scène et mis à l’échelle pour former un long poteau (par exemple
Scale = (0.1, 5, 0.1)). - Ajout du plan : un plan est positionné en haut du poteau, ses composants Mesh Renderer et Mesh Collider sont retirés pour qu’il devienne invisible. Ce plan portera ensuite le tissu.
- Ajout du composant Cloth : dans l’Inspecteur, on utilise Add Component → Physics → Cloth. Le plan est automatiquement converti en Skinned Mesh Renderer et un composant Cloth est ajouté.
- Création du matériau : un matériau (Shader URP/Lit ou URP/Unlit) est créé avec la texture du drapeau.
- Assignation du matériau : ce matériau est placé dans le champ Materials du Skinned Mesh Renderer.
- Peindre les contraintes : en cliquant sur Edit Constraints dans le composant Cloth, tous les sommets deviennent noirs. L’outil de peinture permet de sélectionner la colonne de sommets au niveau du mât et de fixer leur Max Distance à 0. Ces sommets passent au vert pour indiquer qu’ils sont ancrés.

- Test sous gravité : en lançant la scène sans vent, le drapeau se détend sous l’effet de la gravité mais reste attaché au mât aux sommets peints en vert.
- Activation du vent : pour ajouter le vent, on renseigne les champs External Acceleration et Random Acceleration dans le composant Cloth. Valeurs utilisées :
(75, 5, 0)pour l’accélération externe et(105, 5, 20)pour l’accélération aléatoire.
3. Réponses aux questions
3.1 Fondamentaux du vent dans les systèmes physiques
Théorie :
Dans Unity, on ne simule pas l’air réel mais on applique des forces aux objets pour faire comme du vent. On peut donner au drapeau une force fixe + une force qui change pour faire des rafales, ou utiliser une Wind Zone pour souffler sur les arbres et particules.
Pratique :
Pour simuler le vent sur des objets légers (feuilles, papiers), on peut utiliser des Rigidbodies et un script qui applique une force dépendant de la vitesse et de la section du corps :
// WindArea.cs : déclencheur de vent dans une zone (BoxCollider IsTrigger)
using UnityEngine;
public class WindArea : MonoBehaviour {
public float baseSpeed = 8f;
public float gustStrength = 10f;
public Vector3 direction = Vector3.right;
private void OnTriggerStay(Collider other) {
Rigidbody rb = other.attachedRigidbody;
if (rb == null) return;
float t = Time.time * 0.5f;
float gust = Mathf.PerlinNoise(t, 0f) * 2f - 1f;
float speed = baseSpeed + gust * gustStrength;
float airDensity = 1.2f;
float CdA = 0.4f;
WindReceiver recv = other.GetComponent<WindReceiver>();
if (recv != null) CdA = recv.DragCoefficient * recv.CrossSectionArea;
Vector3 force = 0.5f * airDensity * speed * speed * CdA * direction.normalized;
rb.AddForce(force, ForceMode.Force);
}
}3.2 Interaction entre le vent et les objets
Théorie :
Plusieurs facteurs influencent la réaction d’un objet au vent :
- Densité et masse : un objet léger (feuille) accélère fortement pour une force donnée
- Forme et coefficient de traînée : les surfaces planes perpendiculaires au vent présentent un coefficient de traînée élevé (~1)
- Surface exposée : une grande surface offre plus de prise au vent
- Orientation : l’angle entre l’objet et la direction du vent modifie la surface effective exposée
3.3 Optimisation des effets de vent
Théorie :
Simuler le vent sur de nombreux objets peut affecter la performance. On peut optimiser de plusieurs façons :
- Zones limitées : n’appliquer le vent que dans des volumes précis
- Mise à jour en FixedUpdate : appliquer les forces pendant le pas de simulation de la physique
3.4 Simulation de vent dynamique et changeant
Pratique :
Un contrôleur global peut être mis en place :
// WindController.cs
using UnityEngine;
public class WindController : MonoBehaviour {
public static WindController I { get; private set; }
public Vector3 baseDirection = new Vector3(1f, 0.05f, 0f);
public float baseSpeed = 8f;
public float gustStrength = 12f;
public float gustFrequency = 0.3f;
public float headingDriftDegPerSec = 5f;
public Vector3 CurrentWind { get; private set; }
float heading;
void Awake() => I = this;
void FixedUpdate() {
heading += headingDriftDegPerSec * Time.fixedDeltaTime;
Vector3 dir = Quaternion.Euler(0f, heading, 0f) * baseDirection.normalized;
float t = Time.time * gustFrequency;
float gust = Mathf.PerlinNoise(t, 1.23f) * 2f - 1f;
float speed = baseSpeed + gust * gustStrength;
CurrentWind = dir * Mathf.Max(0f, speed);
}
}4. Conclusion
Le TD 7 a montré comment exploiter le composant Cloth de Unity pour simuler un drapeau qui s’affaisse sous la gravité puis flotte au vent. L’outil Edit Constraints permet de fixer les sommets au mât et d’observer l’effet de la gravité. L’ajout d’accélérations externes et aléatoires donne naissance à un vent turbulent qui fait onduler le tissu.