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.
Aufgabe
MittelGib 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
rangeEinheiten 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.
}
}
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