Menu
CoddyTech

Was habe ich getroffen?

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

Das Collision, das Unity an OnCollisionEnter übergibt, beschreibt die andere Seite des Kontakts. collision.gameObject ist das Objekt, mit dem du zusammengestoßen bist, also ist collision.gameObject.name sein Name, und collision.gameObject.CompareTag("Hazard") fragt nach seinem Tag. (collision.collider ist der genaue Collider, den du berührt hast, wenn ein Objekt mehrere hat.)

Dieses Autoscooter protokolliert alles, womit es zusammenstößt, und beschwert sich über Gefahren:

void OnCollisionEnter(Collision collision)
{
    Debug.Log("Bumped into " + collision.gameObject.name);
    if (collision.gameObject.CompareTag("Hazard"))
    {
        Debug.Log("Ouch!");
    }
}

Die erste protokollierte Zeile lautet Bumped into Floor, sobald das Spiel startet: Auch der Boden, auf dem es steht, ist eine Kollision. Ein Skript, das auf Treffer reagiert, fragt also immer zuerst, was es getroffen hat. Achte darauf, welches Objekt du benennst: CompareTag("Hazard") allein fragt nach deinem eigenen Objekt, und Destroy(gameObject) zerstört dein eigenes Objekt, während Destroy(collision.gameObject) das Objekt entfernt, das du getroffen hast.

challenge icon

Aufgabe

Einfach

Gib dem Schneepflug eine Aufgabe: Räume die Blöcke mit dem Tag Snow weg.

  1. Füge void OnCollisionEnter(Collision collision) zu Plow hinzu, sodass die Methode nur dann ausgeführt wird, wenn collision.gameObject.CompareTag("Snow") zutrifft.
  2. Rufe darin Destroy(collision.gameObject); auf, addiere 1 zum Feld cleared und protokolliere "Cleared " + cleared.

Drücke auf „Spielen“ und fahre in den Schnee: Jeder Block verschwindet, und die Console zählt mit. Drücke dann auf „Prüfen“.

Probier es selbst

using UnityEngine;

public class Plow : MonoBehaviour
{
    public float speed = 3f;
    private Rigidbody rb;
    private int cleared;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, 0);
    }

    // Schnee, auf den der Schneepflug trifft: zerstören, zählen und die Anzahl protokollieren
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground