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.
Aufgabe
EinfachSteuere die Drohne durch die Ringe und lass jeden Ring sie melden.
- Setze in
Drone.cs’sStart()body = gameObject.AddComponent<Rigidbody>();undbody.isKinematic = true;, damit sie waagerecht fliegt. - Setze in
Ring.cs’sStart()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
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe4Coroutinen
AufrufenWiederholt aufrufen, Aufruf abbrechenDeine erste CoroutineSchleifen in CoroutinenCoroutinen beendenRückblick: Countdown10Projekt: Arena-Flucht
Die ArenaJäger2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand5Projekt: Münzrausch
Der rollende BallMünzen zum Einsammeln11Abschließende Herausforderungen
KanonenreichweiteBewegliche ZieleMurmelgolfIns LochEscape RoomDie TürÜbe selbstständig: Unity-Playground