Menu
CoddyTech

OnTriggerEnter

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 16 von 71.

void OnTriggerEnter(Collider other) wird einmal ausgeführt, beim Physikschritt, in dem ein anderer Collider beginnt, einen Trigger zu überlappen. other ist dieser Collider. Daher verraten dir other.name, other.gameObject und other.CompareTag("Player"), was eingetreten ist. Unity ruft die Methode in den Skripten beider Objekte auf: Beim Trigger ist other das eintretende Objekt, und beim eintretenden Objekt ist other der Trigger.

Diese Ziellinie reagiert nur auf den Spieler, auf nichts anderes. Ein Ball, der darüberrollt, protokolliert daher nichts:

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        Debug.Log(other.name + " crossed the finish line");
    }
}

Der Parameter muss ein Collider sein. Wird die Methode als void OnTriggerEnter(Collision collision) geschrieben, wird das Skript trotzdem kompiliert, da es für C# eine gewöhnliche Methode ist. Unity überprüft den Parameter selbst, protokolliert einen Script error: OnTriggerEnter mit dem Hinweis This message parameter has to be of type: Collider und ruft die Methode nie auf. Collision gehört zu OnCollisionEnter, wo zwei feste Körper sich an einem Kontaktpunkt treffen. Ein Trigger hat keinen Kontakt zu melden, sondern nur den Collider, daher erhält er einen Collider.

challenge icon

Aufgabe

Einfach

Korrigiere die Methode des Mauttors und kassiere anschließend die Maut von den Autos.

  1. Klicke auf „Spielen“: Die Console zeigt einen Fehler zur Methode an. Ändere sie in void OnTriggerEnter(Collider other).
  2. Füge innerhalb der Methode, wenn other.CompareTag("Car") gilt, toll zu collected hinzu und protokolliere "Toll: " + collected. Der Radfahrer fährt kostenlos durch.

Klicke auf „Spielen“: Die Console zeigt Toll: 3 und dann Toll: 6 an. Klicke anschließend auf „Prüfen“.

Probier es selbst

using UnityEngine;

public class TollGate : MonoBehaviour
{
    public int toll = 3;
    int collected;

    void OnTriggerEnter(Collision collision)
    {
        // Autos zahlen Maut; alles andere darf kostenlos passieren
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground