Menu
CoddyTech

Se briser à l’impact

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

Quel a été l’impact ? collision.relativeVelocity correspond à la vitesse à laquelle les deux objets se rapprochaient au moment où ils se sont rencontrés, et sa magnitude est la vitesse d’impact en m/s. C’est une différence de vitesses : une voiture à 10 m/s qui percute une voiture roulant dans le même sens à 8 m/s ne la percute qu’à 2 m/s, et les deux voitures constatent la même vitesse d’impact.

Cette coquille se casse lorsqu’elle atterrit à une vitesse supérieure à crackSpeed. Lâchée de 1 m, elle heurte le sol à environ 4,4 m/s (la racine carrée de 2 x 9.81 x 1), et de 2 m, à environ 6,3 m/s :

public float crackSpeed = 5f;

void OnCollisionEnter(Collision collision)
{
    if (collision.relativeVelocity.magnitude > crackSpeed)
    {
        Debug.Log("Splat!");
        Destroy(gameObject);
    }
}

Pourquoi ne pas utiliser le rb.linearVelocity de la coquille ? Au moment où OnCollisionEnter s’exécute, la physique a déjà géré l’impact : la vitesse de la coquille est donc celle qui lui reste après le choc, proche de zéro. relativeVelocity conserve la vitesse de l’impact lui-même. C’est une vitesse, donc la masse n’entre pas en jeu : une coquille lourde et une coquille légère atterrissant à 6 m/s indiquent toutes deux la même valeur de 6.

challenge icon

Défi

Facile

Écris Window.cs : chaque impact affaiblit la fenêtre, et elle se brise à 0.

  1. Dans OnCollisionEnter de la fenêtre, soustrais collision.relativeVelocity.magnitude de strength.
  2. Quand strength <= 0f, appelle Destroy(gameObject);.

Appuie sur « Jouer », lance des boules doucement avec la flèche vers le haut, puis une boule fort avec Espace : la fenêtre se brise. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;

public class Window : MonoBehaviour
{
    public float strength = 10f;

    // Chaque coup réduit strength de sa vitesse d’impact ; à 0, la fenêtre se brise
}

Toutes les leçons de Physique et gameplay

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