Menu
CoddyTech

RaycastHit

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

Physics.Raycast kann dir auch sagen, 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 Variable, die du ihr übergibst, einen zusätzlichen Wert zurück. Dieser Entfernungsmesser protokolliert, worauf er zeigt und wie weit es entfernt 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 er auf eine Wand zeigt, 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 (auf flachem Boden (0, 1, 0)), und hit.transform ist der Transform des getroffenen Objekts. Über hit.collider.gameObject kannst du auf alles Weitere darüber zugreifen, zum Beispiel auf 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: einen roten Punkt dort, wo der Laser auftrifft.

  1. Rufe in Update() Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range) auf.
  2. Wenn der Strahl etwas trifft, rufe dot.gameObject.SetActive(true); auf und setze dot.position = hit.point;.
  3. Wenn der Strahl nichts trifft, rufe dot.gameObject.SetActive(false); auf.

Drücke auf „Spielen“ und drehe die Waffe: Der Punkt gleitet über die Wand und die Kisten. Drücke dann auf „Prüfen“.

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 dot aus, wenn der Laser auf nichts trifft.
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground