OverlapSphere e SphereCast
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 40 di 71.
Un raggio chiede informazioni su una linea. Physics.OverlapSphere(center, radius) chiede informazioni su una regione a forma di sfera: restituisce un array di ogni collider che tocca 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 al cui interno iniziano. Ecco perché il ciclo controlla il tag prima di agire. attachedRigidbody di ciascun collider è il Rigidbody a cui appartiene, oppure null per gli elementi 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 varco largo 1.5 tra due pali chiede se ci passa: un raggio sottile diretto al centro del varco non colpisce nulla, mentre il SphereCast colpisce un palo. Come un raggio, uno SphereCast ignora i collider che tocca già nel punto di partenza.
Sfida
MedioDai al cannone un raggio ampio con Physics.SphereCast.
- Alla pressione di Space, esegui una scansione con una sfera:
Physics.SphereCast(transform.position, radius, transform.forward, out RaycastHit hit, range). - In caso di impatto, registra
"Hit " + hit.collider.name(il primo colpo registraHit Pole) e distruggi quell'oggetto. - In caso di mancato impatto, registra
Miss.
Premi «Gioca» e spara tre volte: il Pole scompare, poi il Crate, poi Miss. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class Beam : MonoBehaviour
{
public float radius = 0.5f;
public float range = 12f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// Effettua uno sweep in avanti di una sfera di raggio radius: distruggi il primo oggetto che colpisce.
}
}
}
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 rovescia7Rotazione
Angoli di EuleroQuaternioniGuarda nella direzione in cui ti muoviRuota in modo fluidoRiepilogo: Torretta10Progetto: Fuga dall'arena
L'arenaCacciatori2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliereEsercitati da solo: Playground Unity