Physics.Raycast
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 35 sur 71.
Un raycast lance une ligne invisible depuis un point, dans une direction, et indique si elle a touché un collider. Physics.Raycast(origin, direction, maxDistance) renvoie true lorsqu’un collider se trouve sur la ligne à une distance inférieure ou égale à maxDistance unités, et false dans le cas contraire. Cette voiture freine lorsque quelque chose se trouve à moins de 2 unités devant son nez :
public float brakeDistance = 2f;
void Update()
{
if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
{
Debug.Log("Brake!");
}
}transform.forward pivote avec la voiture, le rayon regarde donc toujours devant son nez ; Vector3.forward pointerait toujours le long de l’axe z du monde. Le rayon part du centre de la voiture, à l’intérieur de son propre collider, et un rayon ne signale jamais un collider à l’intérieur duquel il commence : la voiture ne se détecte donc pas elle-même. Omettez maxDistance et le rayon se prolonge à l’infini : la voiture freinerait à cause d’un mur situé à l’autre bout de la carte.
Les rayons détectent les colliders, pas ce qui est dessiné : un objet avec un Renderer mais sans collider leur est invisible, et un collider de type trigger est considéré comme un impact. Pendant les tests, Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) dessine le rayon dans la vue Scene de Unity.
Défi
MoyenFais en sorte que la porte du magasin s’ouvre lorsqu’une personne se tient sous le capteur.
- Dans
Update(), testePhysics.Raycast(transform.position, Vector3.down, reach): un rayon droit vers le bas, long dereachunités, qui s’arrête au-dessus du sol. - Lorsque le résultat est vrai, appelle
door.SetActive(false);, et dans leelse,door.SetActive(true);.
Clique sur « Jouer » et fais passer le visiteur sous le capteur : la porte s’ouvre, puis se referme derrière lui. Ensuite, clique sur « Vérifier ».
Essayez vous-même
using UnityEngine;
public class DoorSensor : MonoBehaviour
{
public GameObject door;
public float reach = 3f;
void Update()
{
// Ouvrir la porte tant que le rayon dirigé vers le bas depuis le Sensor touche quelque chose.
}
}
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