Menu
CoddyTech

OverlapSphere et SphereCast

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

Un rayon interroge une ligne. Physics.OverlapSphere(center, radius) interroge une région en forme de boule : il renvoie un tableau de tous les colliders qui touchent une sphère centrée 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 se trouve à 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 indique le premier collider que la sphère rencontrerait. Un rocher de rayon 1 roulant vers une ouverture de 1.5 de large entre deux poteaux lui demande s'il peut passer : un rayon fin 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

Armez le canon avec un faisceau large. Le script Beam est attaché au canon, et l’Inspecteur lui attribue un radius de 0.5 et une range de 12. Les flèches gauche et droite font tourner le canon.

  • Lorsque vous appuyez sur Espace, balayez vers l’avant une sphère de radius depuis le canon, sur une longueur de range unités.
  • S’il touche quelque chose, consignez Hit Pole avec le nom de ce qu’il a touché, puis détruisez cet objet.
  • S’il ne touche rien, consignez Miss.

Le fin poteau se trouve légèrement sur le côté de l’axe central du canon. Appuyez sur Jouer et tirez, puis 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))
        {
            // Balayer une sphère de rayon radius vers l'avant : détruire le premier objet qu'elle touche.
        }
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Physique et gameplay