Menu
CoddyTech

OverlapSphere e SphereCast

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 38 di 63.

Un raggio interroga una linea. Physics.OverlapSphere(center, radius) interroga una regione a forma di sfera: restituisce un array di tutti i collider che toccano una sfera in center, senza direzione né distanza. Quando esplode, questa bomba distrugge ogni cassa entro 3 unità:

void Explode()
{
    Collider[] hits = Physics.OverlapSphere(transform.position, 3f);
    foreach (Collider c in hits)
    {
        if (c.CompareTag("Crate"))
        {
            Destroy(c.gameObject);
        }
    }
    Destroy(gameObject);
}

L'array contiene tutto ciò che è a portata: il pavimento, le pareti e il collider della bomba stessa, perché i test di sovrapposizione non ignorano il collider all'interno del quale iniziano. Ecco perché il ciclo controlla il tag prima di agire. Il attachedRigidbody di ogni collider è il Rigidbody a cui appartiene, oppure null per gli oggetti statici, come il pavimento.

Physics.SphereCast(origin, radius, direction, out hit, maxDistance) è un raggio spesso: fa scorrere una sfera lungo la linea e segnala il primo collider contro cui la sfera urterebbe. Un masso di raggio 1 che rotola verso un'apertura larga 1.5 tra due paletti chiede a questa funzione se riesce a passare: un raggio sottile al centro dell'apertura non colpisce nulla, mentre lo sphere cast colpisce un paletto. Come un raggio, uno sphere cast ignora i collider che tocca già nel punto in cui inizia.

challenge icon

Sfida

Medio

Arma il cannone con un raggio ampio. Lo script Beam si trova sul cannone e l’Inspector gli assegna un radius di 0.5 e un range di 12. Le frecce sinistra e destra ruotano il cannone.

  • Quando premi Spazio, spazza in avanti una sfera di radius dal cannone, lunga range unità.
  • Se colpisce qualcosa, registra Hit Pole con il nome dell’oggetto colpito e distruggi quell’oggetto.
  • Se non colpisce nulla, registra Miss.

Il sottile palo si trova leggermente di lato rispetto alla linea centrale del cannone. Premi Play e spara, poi Check.

Provalo tu

using UnityEngine;

public class Beam : MonoBehaviour
{
    public float radius = 0.5f;
    public float range = 12f;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Fai avanzare una sfera di raggio radius: distruggi il primo oggetto che colpisce.
        }
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fisica e gameplay