Menu
CoddyTech

Beim Aufprall zerbrechen

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 10 von 63.

Wie heftig war der Aufprall? collision.relativeVelocity gibt an, wie schnell sich die beiden Objekte im Moment ihrer Kollision aufeinander zubewegt haben, und sein magnitude ist die Aufprallgeschwindigkeit in m/s. Es handelt sich um eine Geschwindigkeitsdifferenz: Ein Auto mit 10 m/s, das auf ein Auto auffährt, das in dieselbe Richtung mit 8 m/s fährt, prallt nur mit 2 m/s auf, und beide Autos messen dieselbe Aufprallgeschwindigkeit.

Dieses Ei zerbricht, wenn es mit mehr als crackSpeed aufkommt. Aus 1 m Höhe fallen gelassen, trifft es mit etwa 4.4 m/s auf (der Quadratwurzel aus 2 x 9.81 x 1), aus 2 m Höhe mit etwa 6.3 m/s:

public float crackSpeed = 5f;

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

Warum nicht die eigene rb.linearVelocity des Eis? Wenn OnCollisionEnter ausgeführt wird, hat die Physik den Aufprall bereits verarbeitet, daher entspricht die Geschwindigkeit des Eis dem, was danach übrig ist – fast null. relativeVelocity behält die Geschwindigkeit des Aufpralls selbst bei. Es ist eine Geschwindigkeit, daher spielt die Masse keine Rolle: Ein schweres und ein leichtes Ei, die mit 6 m/s landen, melden beide denselben Wert von 6.

challenge icon

Aufgabe

Einfach

Der Ball rollt auf das Fenster zu: Der Aufwärtspfeil lässt ihn sanft rollen, die Leertaste kräftig (Bowler.cs, bereits geschrieben). Schreibe Window.cs. Das Fenster hat eine strength (10 im Inspector).

  • Jeder Treffer schwächt das Fenster um seine Aufprallgeschwindigkeit: Ein Treffer mit 2 m/s zieht 2 von strength ab.
  • Wenn strength 0 oder weniger erreicht, zerbricht das Fenster: Zerstöre das Fenster.

Drücke Play, lass ein paar Bälle sanft und danach einen kräftig rollen und klicke dann auf Check.

Probier es selbst

using UnityEngine;

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

    // Jeder Treffer verringert strength um seine Aufprallgeschwindigkeit; bei 0 zerspringt das Fenster
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Physik und Gameplay