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.
Aufgabe
MittelGib der Waffe ein Laservisier: einen roten Punkt dort, wo der Laser auftrifft.
- Rufe in
Update()Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range)auf. - Wenn der Strahl etwas trifft, rufe
dot.gameObject.SetActive(true);auf und setzedot.position = hit.point;. - 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
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