Menu
CoddyTech

Rebond et friction

Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 12 sur 71.

La façon dont un collider rebondit et glisse dépend de son PhysicsMaterial (le nom utilisé dans Unity 6 ; les versions antérieures l’appelaient PhysicMaterial). bounciness varie de 0 (aucun rebond) à 1 (conserve toute sa vitesse). dynamicFriction ralentit un corps qui glisse, et staticFriction détermine avec quelle force il faut pousser un corps au repos avant qu’il ne commence à glisser. Un collider sans matériau se comporte comme s’il avait une friction de 0.6 et un coefficient de rebond de 0. Cette super balle donne à son propre collider un matériau rebondissant :

void Start()
{
    PhysicsMaterial mat = GetComponent<Collider>().material;   // la copie propre à ce collider
    mat.bounciness = 0.9f;
    mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}

Un contact met en jeu deux colliders, Unity combine donc leurs deux valeurs. Chaque matériau définit la manière de les combiner, avec bounceCombine pour le coefficient de rebond et frictionCombine pour la friction ; chacun propose quatre modes : Average (le mode par défaut), Minimum, Multiply ou Maximum. Lorsque les deux colliders demandent des modes différents, celui qui apparaît le plus tard dans cette liste l’emporte. Sur un sol sans matériau, le mode Average donnerait à la balle (0.9 + 0) / 2 = 0.45. Avec Maximum, elle conserve 0.9 de sa vitesse à chaque rebond, soit 0.9 x 0.9 = 81 % de sa hauteur, puisque la hauteur dépend du carré de la vitesse.

.material donne à ce collider sa propre copie de son matériau, de sorte que les modifications ne l’affectent que lui. .sharedMaterial est l’asset de matériau lui-même, partagé par tous les colliders qui l’utilisent ; il vaut null sur un collider auquel aucun matériau n’a jamais été attribué.

challenge icon

Défi

Facile

Attribue au trampoline et à la glace leurs propres valeurs de rebond et de friction.

  1. Dans Start(), récupère PhysicsMaterial mat = GetComponent<Collider>().material; et définis mat.bounciness = bounce;, mat.dynamicFriction et mat.staticFriction sur friction.
  2. Définis mat.bounceCombine = PhysicsMaterialCombine.Maximum; et mat.frictionCombine = PhysicsMaterialCombine.Minimum;, afin que les valeurs propres à la surface l'emportent.

Appuie sur « Jouer » : la balle rebondit haut sur le trampoline. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;

public class Surface : MonoBehaviour
{
    public float bounce = 0f;
    public float friction = 0.6f;

    void Start()
    {
        // Attribuer à ce collider son propre matériau avec bounce et friction
    }
}

Toutes les leçons de Physique et gameplay

Entraînez-vous par vous-même : Playground Unity