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.
Aufgabe
MittelMach 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
reachEinheiten 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.
}
}
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