OverlapSphere e SphereCast
Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 40 de 71.
Um raio pergunta sobre uma linha. Physics.OverlapSphere(center, radius) pergunta sobre uma região em forma de bola: ele retorna um array de todos os colliders que tocam uma esfera em center, sem direção nem distância. Esta bomba destrói todas as caixas a até 3 unidades de distância quando explode:
void Explode()
{
Collider[] hits = Physics.OverlapSphere(transform.position, 3f);
foreach (Collider c in hits)
{
if (c.CompareTag("Crate"))
{
Destroy(c.gameObject);
}
}
Destroy(gameObject);
}O array contém tudo o que está ao alcance: o chão, as paredes e o próprio collider da bomba, porque os testes de sobreposição não ignoram o collider dentro do qual começam. Por isso o loop verifica a tag antes de agir. O attachedRigidbody de cada collider é o Rigidbody ao qual ele pertence, ou null para objetos estáticos, como o chão.
Physics.SphereCast(origin, radius, direction, out hit, maxDistance) é um raio espesso: ele varre uma esfera ao longo da linha e informa o primeiro collider com o qual a esfera colidiria. Uma pedra com raio 1 rolando em direção a uma abertura de 1.5 de largura entre dois postes pergunta se cabe: um raio fino no meio da abertura não atinge nada, enquanto o sphere cast atinge um poste. Assim como um raio, um sphere cast ignora os colliders que já toca no ponto de origem.
Desafio
MédioDê ao canhão um feixe amplo com Physics.SphereCast.
- Ao pressionar Espaço, varra uma esfera:
Physics.SphereCast(transform.position, radius, transform.forward, out RaycastHit hit, range). - Ao acertar, registre
"Hit " + hit.collider.name(o primeiro disparo registraHit Pole) e destrua esse objeto. - Ao errar, registre
Miss.
Pressione “Jogar” e atire três vezes: o Pole desaparece, depois o Crate, depois Miss. Em seguida, clique em “Verificar”.
Experimente você mesmo
using UnityEngine;
public class Beam : MonoBehaviour
{
public float radius = 0.5f;
public float range = 12f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// Varra uma esfera de raio radius para a frente: destrua a primeira coisa que ela atingir.
}
}
}
Todas as lições de Física e Jogabilidade
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento4Corrotinas
InvocarInvocar repetidamente, Cancelar invocaçãoSua primeira corrotinaLoops em corrotinasInterrompendo corrotinasRevisão: contagem regressiva10Projeto: Fuga da Arena
A ArenaCaçadores2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para ColetarPratique por conta própria: Playground de Unity