OnTriggerEnter
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 16 von 63.
void OnTriggerEnter(Collider other) wird einmal beim Physikschritt ausgeführt, in dem ein anderer Collider beginnt, einen Trigger zu überlappen. other ist dieser Collider. Mit other.name, other.gameObject und other.CompareTag("Player") kannst du herausfinden, was hineingekommen ist. Unity ruft die Methode in den Skripten beider Objekte auf: Beim Trigger ist other das eintretende Objekt, beim eintretenden Objekt ist other der Trigger.
Diese Ziellinie reagiert nur auf den Spieler. Ein Ball, der darüberrollt, löst daher keine Ausgabe aus:
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log(other.name + " crossed the finish line");
}
}Der Parameter muss vom Typ Collider sein. Wenn du die Methode als void OnTriggerEnter(Collision collision) schreibst, wird das Skript trotzdem kompiliert, weil sie für C# eine gewöhnliche Methode ist. Unity prüft den Parameter selbst, gibt die Fehlermeldung Script error: OnTriggerEnter mit dem Hinweis This message parameter has to be of type: Collider aus und ruft die Methode niemals auf. Collision gehört zu OnCollisionEnter, wo zwei feste Körper an einem Kontaktpunkt aufeinandertreffen. Ein Trigger hat keinen Kontaktpunkt zu melden, sondern nur den Collider, daher erhält er einen Collider.
Aufgabe
EinfachFahrzeuge fahren durch die Mautschranke, einen Trigger. Das Skript Driver bewegt sie und ist fertig. Schreibe das Skript TollGate für die Schranke:
- Jedes Fahrzeug mit dem Tag
Carzahlttoll(3): Addiere den Betrag zucollectedund gib die Summe in der Konsole aus:Toll: 3für das erste Auto, dannToll: 6. - Alles andere, zum Beispiel der Radfahrer, fährt kostenlos durch und gibt nichts in der Konsole aus.
Drücke zuerst auf Play: In der Konsole wird bereits ein Skriptfehler zur Methode angezeigt, so wie sie geschrieben ist. Behebe ihn und klicke dann auf Check.
Probier es selbst
using UnityEngine;
public class TollGate : MonoBehaviour
{
public int toll = 3;
int collected;
void OnTriggerEnter(Collision collision)
{
// Autos zahlen die Maut; alles andere fährt kostenlos durch
}
}
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