Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Die 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, dann Pressed 2 und 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, ...
}
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