Menu
CoddyTech

OverlapSphere et SphereCast

Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 40 sur 71.

Un rayon pose une question au sujet d'une ligne. Physics.OverlapSphere(center, radius) pose une question au sujet d'une région en forme de boule : il renvoie un tableau de tous les colliders qui touchent une sphère en center, sans direction ni distance. Cette bombe détruit toutes les caisses situées à moins de 3 unités lorsqu'elle explose :

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

Le tableau contient tout ce qui est à portée : le sol, les murs et le collider de la bombe elle-même, car les tests de chevauchement n'ignorent pas le collider à l'intérieur duquel ils commencent. C'est pourquoi la boucle vérifie le tag avant d'agir. Le attachedRigidbody de chaque collider est le Rigidbody auquel il appartient, ou null pour les éléments statiques comme le sol.

Physics.SphereCast(origin, radius, direction, out hit, maxDistance) est un rayon épais : il balaie une sphère le long de la ligne et signale le premier collider que la sphère heurterait. Un rocher de rayon 1 qui roule vers une ouverture de 1.5 de large entre deux poteaux lui demande s'il peut passer : un rayon fin passant au milieu de l'ouverture ne touche rien, tandis que le sphere cast touche un poteau. Comme un rayon, un sphere cast ignore les colliders qu'il touche déjà à son point de départ.

challenge icon

Défi

Moyen

Donne au canon un faisceau large avec Physics.SphereCast.

  1. À l’appui sur Espace, balaie une sphère : Physics.SphereCast(transform.position, radius, transform.forward, out RaycastHit hit, range).
  2. En cas de collision, journalise "Hit " + hit.collider.name (le premier tir journalise Hit Pole) et détruis cet objet.
  3. En cas de tir manqué, journalise Miss.

Appuie sur « Jouer » et tire trois fois : le Pole disparaît, puis le Crate, puis Miss. Ensuite, clique sur « Vérifier ».

Essayez vous-même

using UnityEngine;

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

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Balayez une sphère de rayon radius vers l’avant : détruisez le premier objet qu’elle touche.
        }
    }
}

Toutes les leçons de Physique et gameplay

Entraînez-vous par vous-même : Playground Unity