OverlapSphere und SphereCast
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 38 von 63.
Ein Ray fragt eine Linie ab. Physics.OverlapSphere(center, radius) fragt einen kugelförmigen Bereich ab: Die Methode gibt ein Array aller Collider zurück, die eine Kugel um center berühren, ohne Richtung und ohne Entfernung. Diese Bombe zerstört bei der Explosion jede Kiste innerhalb von 3 Einheiten:
void Explode()
{
Collider[] hits = Physics.OverlapSphere(transform.position, 3f);
foreach (Collider c in hits)
{
if (c.CompareTag("Crate"))
{
Destroy(c.gameObject);
}
}
Destroy(gameObject);
}Das Array enthält alles in Reichweite: den Boden, die Wände und den eigenen Collider der Bombe, da Überlappungstests den Collider nicht überspringen, in dem sie starten. Deshalb prüft die Schleife das Tag, bevor sie etwas unternimmt. Das attachedRigidbody jedes Colliders ist das Rigidbody, zu dem er gehört, oder null bei statischen Objekten wie dem Boden.
Physics.SphereCast(origin, radius, direction, out hit, maxDistance) ist ein dicker Ray: Er bewegt eine Kugel entlang der Linie und meldet den ersten Collider, mit dem die Kugel zusammenstoßen würde. Ein Felsbrocken mit Radius 1, der auf eine 1.5 breite Lücke zwischen zwei Pfosten zurollt, fragt damit ab, ob er hindurchpasst: Ein dünner Ray durch die Mitte der Lücke trifft nichts, während der Sphere Cast einen Pfosten trifft. Wie ein Ray überspringt ein Sphere Cast Collider, die er an seinem Startpunkt bereits berührt.
Aufgabe
MittelRüste die Kanone mit einem breiten Strahl aus. Das Skript Beam befindet sich auf der Kanone, und im Inspector erhält es einen radius von 0.5 und eine range von 12. Mit den linken und rechten Pfeiltasten drehst du die Kanone.
- Wenn die Leertaste gedrückt wird, fege eine Kugel mit dem
radiusvon der Kanone aus nach vorne, mit einer Länge vonrangeEinheiten. - Wenn sie etwas trifft, gib
Hit Polezusammen mit dem Namen des getroffenen Objekts aus und zerstöre dieses Objekt. - Wenn sie nichts trifft, gib
Missaus.
Der dünne Pfahl steht etwas seitlich von der Mittellinie der Kanone. Drücke Play und feuere, dann Check.
Probier es selbst
using UnityEngine;
public class Beam : MonoBehaviour
{
public float radius = 0.5f;
public float range = 12f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// Bewege eine Kugel mit dem Radius radius nach vorn: Zerstöre das erste Objekt, das sie 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