Abprallen und Reibung
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 12 von 71.
Wie ein Collider abprallt und gleitet, hängt von seinem PhysicsMaterial ab (so heißt es in Unity 6; in älteren Versionen hieß es PhysicMaterial). bounciness reicht von 0 (kein Abprallen) bis 1 (behält die 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 Rückprallkraft von 0. Dieser Superball gibt seinem eigenen Collider ein elastisches Material:
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 Rückprallkraft und frictionCombine für die Reibung. Dabei stehen jeweils vier Modi zur Auswahl: Average (der Standardwert), Minimum, Multiply oder Maximum. Wenn die beiden Collider unterschiedliche Modi vorgeben, gewinnt derjenige, der in dieser Liste weiter hinten steht. Bei einem Boden ohne Material würde Average dem Ball (0.9 + 0) / 2 = 0.45 geben. 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 verwendet wird, der es nutzt. Bei einem Collider, dem nie ein Material zugewiesen wurde, ist es null.
Aufgabe
EinfachGib dem Trampolin und dem Eis jeweils eine eigene Sprungkraft und Reibung.
- Hole dir in
Start()PhysicsMaterial mat = GetComponent<Collider>().material;und setzemat.bounciness = bounce;,mat.dynamicFrictionundmat.staticFrictionauffriction. - Setze
mat.bounceCombine = PhysicsMaterialCombine.Maximum;undmat.frictionCombine = PhysicsMaterialCombine.Minimum;, damit die eigenen Werte der Oberfläche Vorrang haben.
Drücke „Spielen“: Der Ball springt hoch vom Trampolin ab. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
public class Surface : MonoBehaviour
{
public float bounce = 0f;
public float friction = 0.6f;
void Start()
{
// Weise diesem Collider ein eigenes Material mit bounce und friction zu
}
}
Alle Lektionen in Physik und Gameplay
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe4Coroutinen
AufrufenWiederholt aufrufen, Aufruf abbrechenDeine erste CoroutineSchleifen in CoroutinenCoroutinen beendenRückblick: Countdown10Projekt: Arena-Flucht
Die ArenaJäger2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand5Projekt: Münzrausch
Der rollende BallMünzen zum Einsammeln11Abschließende Herausforderungen
KanonenreichweiteBewegliche ZieleMurmelgolfIns LochEscape RoomDie TürÜbe selbstständig: Unity-Playground