Menu
CoddyTech

Trigger-Collider

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

Ein Collider, bei dem „Ist Auslöser“ angekreuzt ist, ist nicht mehr fest: Rigidbodies gehen direkt hindurch, und Unity meldet stattdessen die Überlappung, indem es OnTriggerEnter in den Skripten beider Objekte aufruft. Ziellinien, Sammelobjekte und Gefahrenzonen sind Auslöser. Im Code ist das Kästchen die Eigenschaft isTrigger des Colliders.

Die Alarmzone dieses Tresors schaltet ihren Collider beim Spielstart auf einen Auslöser um – das entspricht dem Ankreuzen des Kästchens – und löst Alarm aus, wenn eine Wache hineingeht:

void Start()
{
    GetComponent<Collider>().isTrigger = true;
}

void OnTriggerEnter(Collider other)
{
    Debug.Log("Alarm!");
}

Für Auslöser gilt dieselbe Regel wie für Kollisionen: Unity prüft ein Paar nur, wenn mindestens eines der beiden Objekte einen Rigidbody hat. Zwei Objekte ohne Rigidbody melden einander niemals, unabhängig davon, ob sie Auslöser sind oder nicht. Die Wachen patrouillieren mithilfe eines Skripts, daher hat jede Wache einen kinematischen Rigidbody (Komponente hinzufügen, Rigidbody, „Is Kinematic“ angekreuzt): Die Schwerkraft und Stöße wirken sich nicht auf ihn aus, und er zählt trotzdem als Rigidbody. Ohne die Rigidbodies der Wachen geht eine Wache durch die Zone, und die Konsole bleibt leer. Ohne isTrigger ist die Zone ein fester Kasten, und ein kinematischer Körper berührt niemals einen Collider ohne Rigidbody, sodass wiederum nichts protokolliert wird. Ein Rigidbody im Paar genügt, an einem der beiden Objekte. In der nächsten Lektion geht es um other, den Collider, der hineingekommen ist.

challenge icon

Aufgabe

Einfach

Steuere die Drohne durch die Ringe und lass jeden Ring sie melden.

  1. Setze in Drone.cs’s Start() body = gameObject.AddComponent<Rigidbody>(); und body.isKinematic = true;, damit sie waagerecht fliegt.
  2. Setze in Ring.cs’s Start() GetComponent<Collider>().isTrigger = true;.

Drücke „Spielen“: Die Drohne fliegt hindurch und die Konsole zeigt „Ring1 passed“, „Ring2 passed“ und „Ring3 passed“ an. Drücke anschließend „Prüfen“.

Probier es selbst

using UnityEngine;

public class Ring : MonoBehaviour
{
    void Start()
    {
        // Mache den Collider dieses Rings zu einem Trigger
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(name + " passed");
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground