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.
Sfida
MedioArma 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
radiusdal cannone, lungarangeunità. - Se colpisce qualcosa, registra
Hit Polecon 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.
}
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fisica e gameplay
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliere