Menu
CoddyTech

RaycastHit

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

Physics.Raycast kann dir auch mitteilen, was getroffen wurde. Füge nach der Richtung out RaycastHit hit hinzu: Wenn die Methode true zurückgibt, hat sie hit mit den Details gefüllt. Mit out gibt eine C#-Methode über eine von dir angegebene Variable einen zusätzlichen Wert zurück. Dieser Entfernungsmesser protokolliert, worauf er zeigt und wie weit entfernt es ist, wenn du die Leertaste drückst:

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
        {
            Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
        }
    }
}

Wenn du auf eine Wand zeigst, deren Vorderseite 12 Einheiten entfernt ist, protokolliert er Wall is 12 units away. Die anderen Felder: hit.point ist der Punkt in der Welt, an dem der Strahl die Oberfläche berührt hat, hit.normal ist die Richtung, in die die Oberfläche an diesem Punkt zeigt ((0, 1, 0) auf ebenem Boden), und hit.transform ist der Transform des getroffenen Objekts. Über hit.collider.gameObject erreichst du alles Weitere darüber, zum Beispiel sein Tag.

Lies hit nur innerhalb des if. Wenn der Strahl nichts trifft, gibt Raycast false zurück und hit enthält nichts Brauchbares: Sein collider ist null.

challenge icon

Aufgabe

Mittel

Gib der Waffe ein Laservisier. Das Skript LaserSight befindet sich auf der Waffe, und im Inspector weist du ihm den roten dot (einen Transform) und eine range von 15 zu. Mit den Pfeiltasten nach links und rechts drehst du die Waffe.

  • Wirf in jedem Frame einen Strahl von der Waffe entlang ihrer Vorwärtsrichtung, der range Einheiten lang ist.
  • Wenn er etwas trifft, zeige den Punkt an und positioniere ihn genau dort, wo der Strahl die Oberfläche berührt.
  • Wenn er nichts trifft, blende den Punkt mit SetActive(false) aus.

Der Punkt befindet sich auf dem Ignore Raycast-Layer, damit der Strahl durch den Punkt selbst hindurchgeht. Drücke Play und fahre mit dem Laser über die Wand, die Kiste und das Fass, dann Check.

Probier es selbst

using UnityEngine;

public class LaserSight : MonoBehaviour
{
    public Transform dot;
    public float range = 15f;

    void Update()
    {
        // Platziere dot dort, wo der Laser auf eine Oberfläche trifft; blende es aus, wenn der Laser nichts 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