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.
Défi
MoyenDonne au canon un faisceau large avec Physics.SphereCast.
- À l’appui sur Espace, balaie une sphère :
Physics.SphereCast(transform.position, radius, transform.forward, out RaycastHit hit, range). - En cas de collision, journalise
"Hit " + hit.collider.name(le premier tir journaliseHit Pole) et détruis cet objet. - 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
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 à rebours7Rotation
Angles d’EulerQuaternionsRegardez dans la direction où vous vous déplacezTourner en douceurRécapitulatif : tourelle10Projet : Évasion de l’arène
L’arèneLes chasseurs2Collisions
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 à ramasserLes caisses gardent le resteZones 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 laserEntraînez-vous par vous-même : Playground Unity