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.
Défi
MoyenArmez 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
radiusdepuis le canon, sur une longueur derangeunités. - S’il touche quelque chose, consignez
Hit Poleavec 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.
}
}
}
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
1Corps rigide
Gravité et massePousser avec AddForceSauter avec une impulsionFixedUpdate pour la physiqueVitesseCorps cinématiquesRécapitulatif : plateforme de lancement4Coroutines
InvoquerInvokeRepeating, CancelInvokeVotre première coroutineBoucles dans les coroutinesArrêter les coroutinesRécapitulatif : compte à rebours2Collisions
OnCollisionEnterQu’est-ce que j’ai touché ?Se briser à l’impactRester au solRebond et frictionFormes des collidersRécapitulatif : mur destructible5Projet : Course aux pièces
La balle roulanteDes pièces à ramasser3Déclencheurs
Colliders déclencheursOnTriggerEnterObjets à ramasserZones mortellesEntrée et sortieRécapitulatif : clé et porte6Lancers de rayons
Physics.RaycastRaycastHitVérifier le sol avec un rayonLayers et LayerMaskLigne de vueOverlapSphere et SphereCastRécapitulatif : fil-piège laser