Menu
CoddyTech

Physics.Raycast

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 33 von 63.

Ein Raycast schießt eine unsichtbare Linie von einem Punkt in eine Richtung und meldet, ob sie einen Collider getroffen hat. Physics.Raycast(origin, direction, maxDistance) gibt true zurück, wenn sich innerhalb von maxDistance Einheiten ein Collider auf der Linie befindet, andernfalls false. Dieses Auto bremst, wenn sich weniger als 2 Einheiten vor seiner Nase etwas befindet:

public float brakeDistance = 2f;

void Update()
{
    if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
    {
        Debug.Log("Brake!");
    }
}

transform.forward dreht sich mit dem Auto, sodass der Strahl immer aus seiner Nase nach vorne zeigt; Vector3.forward würde dagegen immer entlang der z-Achse der Welt zeigen. Der Strahl beginnt in der Mitte des Autos, innerhalb seines eigenen Colliders, und ein Strahl meldet niemals einen Collider, in dem er beginnt, sodass das Auto sich selbst nicht sieht. Lässt du maxDistance weg, läuft der Strahl endlos weiter: Das Auto würde wegen einer Wand am anderen Ende der Karte bremsen.

Strahlen erkennen Collider, nicht das, was gezeichnet wird: Ein Objekt mit einem Renderer und ohne Collider ist für sie unsichtbar, und ein Trigger-Collider zählt als Treffer. Während du testest, zeichnet Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) den Strahl in Unitys Scene-Ansicht.

challenge icon

Aufgabe

Mittel

Mach die Ladentür automatisch. Das Skript DoorSensor befindet sich auf dem Sensor über dem Eingang, 3.5 Einheiten über dem Boden. Weise ihm im Inspector die door und eine reach von 3 zu.

  • Wirf in jedem Frame einen Strahl vom Sensor gerade nach unten, der reach Einheiten lang ist.
  • Solange der Strahl etwas trifft, ist die Tür offen: Blende sie mit SetActive(false) aus. Wenn er nichts trifft, zeige die Tür wieder an.

Der Boden liegt außerhalb der Reichweite des Strahls, daher bleibt die Tür geschlossen, bis jemand unter dem Sensor steht. Drücke Spielen und bewege den Besucher mit den Pfeiltasten darunter, dann Prüfen.

Probier es selbst

using UnityEngine;

public class DoorSensor : MonoBehaviour
{
    public GameObject door;
    public float reach = 3f;

    void Update()
    {
        // Öffne die Tür, solange der vom Sensor nach unten gerichtete Strahl auf etwas trifft.
    }
}
quiz iconTeste dich selbst

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