Menu
CoddyTech

Abprallen und Reibung

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

Wie ein Collider abprallt und gleitet, hängt von seinem PhysicsMaterial ab (so heißt es in Unity 6; ältere Versionen nannten es PhysicMaterial). bounciness reicht von 0 (kein Abprallen) bis 1 (behält seine gesamte Geschwindigkeit bei). dynamicFriction bremst einen Körper, der gleitet, und staticFriction bestimmt, wie stark ein ruhender Körper geschoben werden muss, bevor er zu gleiten beginnt. Ein Collider ohne Material verhält sich so, als hätte er eine Reibung von 0.6 und eine Abprallfähigkeit von 0. Dieser Superball weist seinem eigenen Collider ein federndes Material zu:

void Start()
{
    PhysicsMaterial mat = GetComponent<Collider>().material;   // die eigene Kopie dieses Colliders
    mat.bounciness = 0.9f;
    mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}

Bei einem Kontakt sind zwei Collider beteiligt, daher kombiniert Unity ihre beiden Werte. Jedes Material legt fest, wie das geschieht: mit bounceCombine für die Abprallfähigkeit und frictionCombine für die Reibung. Für beide gibt es vier Modi: Average (der Standardwert), Minimum, Multiply oder Maximum. Wenn die beiden Collider unterschiedliche Modi anfordern, gewinnt derjenige, der in dieser Liste weiter hinten steht. Auf einem Boden ohne Material würde Average für den Ball (0.9 + 0) / 2 = 0.45 ergeben. Mit Maximum behält er bei jedem Abprallen 0.9 seiner Geschwindigkeit bei, was 0.9 x 0.9 = 81% seiner Höhe entspricht, da die Höhe mit dem Quadrat der Geschwindigkeit zusammenhängt.

.material gibt diesem Collider eine eigene Kopie seines Materials, sodass sich die Änderungen nur auf ihn auswirken. .sharedMaterial ist das Material-Asset selbst, das von jedem Collider gemeinsam genutzt wird, der es verwendet, und hat den Wert null, wenn einem Collider nie ein Material zugewiesen wurde.

challenge icon

Aufgabe

Einfach

Gib dem Spielplatz seine Oberflächen. Das Skript Surface befindet sich auf dem blauen Trampolin (bounce 0.8, friction 0.6) und auf dem Eisstreifen (bounce 0, friction 0.1). Der Ball und die Kiste haben keine eigenen Materialien.

  • Setze in Start() das eigene Material dieses Colliders auf bounce und friction (sowohl dynamisch als auch statisch).
  • Alles, was auf einer Oberfläche landet, muss mit dem vollen bounce der Oberfläche abprallen, und alles, was darauf rutscht, muss die eigene friction der Oberfläche erhalten, nicht eine Mischung mit dem Wert 0.6 von Objekten ohne Material.

Drücke Play, um den Ball abprallen zu sehen, und dann Check: Dabei wird auch die Kiste über das Eis geschoben.

Probier es selbst

using UnityEngine;

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

    void Start()
    {
        // Gib diesem Collider ein eigenes Material mit bounce und friction
    }
}
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