OnCollisionEnter
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 8 von 63.
Wenn zwei Collider beginnen, sich zu berühren, ruft Unity OnCollisionEnter(Collision collision) in den Skripten beider Objekte auf. Der Aufruf erfolgt einmalig, in dem Physikschritt, in dem die Berührung beginnt, und nicht erneut, solange die Objekte in Kontakt bleiben. Damit es überhaupt zu einer Kollision kommt, benötigt mindestens eines der beiden Objekte ein Rigidbody, das von der Physik bewegt wird: Eine Wand und ein Boden ohne Rigidbody melden einander niemals etwas.
Diese Kiste protokolliert, wenn sie landet. Sie hat ein Rigidbody und fällt daher, und die Meldung wird in dem Schritt ausgegeben, in dem sie auf den Boden trifft:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Thud!");
}Die Kiste protokolliert dies einmal und erst wieder, nachdem sie den Boden verlassen hat und ein zweites Mal landet. Auch der Boden erhält die Meldung: Ein Skript darauf würde hören, wie die Kiste landet, obwohl der Boden kein Rigidbody hat. Der Name und der Parameter müssen exakt stimmen. Eine Methode namens onCollisionEnter wird niemals aufgerufen, ohne dass ein Fehler gemeldet wird. Bei einer Methode, die ein Collider entgegennimmt, protokolliert Unity Script error: OnCollisionEnter mit This message parameter has to be of type: Collision und ignoriert sie. Solange die beiden Objekte in Kontakt bleiben, ruft Unity OnCollisionStay in jedem Physikschritt auf, und wenn sie sich trennen, einmalig OnCollisionExit.
Aufgabe
EinfachDie Druckplatte zählt, was auf ihr landet. Die Platte hat kein Rigidbody; die Kiste darüber hat eines und fällt darauf.
- Jedes Mal, wenn etwas die Platte zu berühren beginnt, erhöhe einen Zähler um 1 und gib ihn in der Console aus:
Pressed 1, dannPressed 2und so weiter. - Etwas, das auf der Platte liegen bleibt, zählt nur einmal, egal, wie lange es dort bleibt.
Drücke Spielen und beobachte die Console, dann Überprüfen.
Probier es selbst
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// Zähle jedes Landen und protokolliere es: Pressed 1, Pressed 2, ...
}
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
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand