Physics.Raycast
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 35 von 71.
Ein Raycast schießt von einem Punkt aus in eine Richtung eine unsichtbare Linie 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 Front 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 Front herauszeigt; Vector3.forward würde immer entlang der z-Achse der Welt zeigen. Der Strahl beginnt in der Mitte des Autos, innerhalb seines eigenen Colliders. Ein Strahl meldet niemals einen Collider, in dem er startet, daher sieht das Auto sich selbst nicht. Lässt du maxDistance weg, läuft der Strahl endlos weiter: Das Auto würde wegen einer Wand auf der anderen Seite der Karte bremsen.
Strahlen erfassen Collider, nicht das, was gezeichnet wird: Ein Objekt mit einem Renderer, aber 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
MittelLass die Ladentür öffnen, während jemand unter dem Sensor steht.
- Teste in
Update()Physics.Raycast(transform.position, Vector3.down, reach): einen Strahl gerade nach unten, derreachEinheiten lang ist und oberhalb des Bodens endet. - Wenn die Bedingung wahr ist, rufe
door.SetActive(false);auf und imelse-Zweigdoor.SetActive(true);.
Drücke „Spielen“ und gehe mit dem Besucher unter den Sensor: Die Tür öffnet sich und schließt sich hinter ihm. Drücke 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.
}
}
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