Menu
CoddyTech

Physics.Raycast

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

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 tourne avec la voiture, de sorte que le rayon pointe toujours vers l’avant depuis 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 dans lequel il démarre : la voiture ne se voit donc pas elle-même. Si tu omets maxDistance, le rayon se prolonge à l’infini : la voiture freinerait devant un mur situé de l’autre côté de la carte.

Les rayons détectent les colliders, pas ce qui est dessiné : un objet doté d’un Renderer mais sans collider leur est invisible, et un collider de type trigger compte comme un impact. Pendant tes tests, Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) dessine le rayon dans la vue Scene de Unity.

challenge icon

Défi

Moyen

Rends la porte de la boutique automatique. Le script DoorSensor se trouve sur le capteur au-dessus de l’entrée, à 3.5 unités du sol. L’inspecteur lui attribue door et une portée (reach) de 3.

  • À chaque image, lance un rayon depuis le capteur tout droit vers le bas, d’une longueur de reach unités.
  • Tant que le rayon touche quelque chose, la porte est ouverte : masque-la avec SetActive(false). S’il ne touche rien, affiche à nouveau la porte.

Le sol est hors de portée du rayon, donc la porte reste fermée jusqu’à ce que quelqu’un se tienne sous le capteur. Appuie sur Play et déplace le visiteur sous le capteur avec les flèches, puis clique sur Check.

Essayez vous-même

using UnityEngine;

public class DoorSensor : MonoBehaviour
{
    public GameObject door;
    public float reach = 3f;

    void Update()
    {
        // Ouvre la porte tant que le rayon dirigé vers le bas depuis le Sensor touche quelque chose.
    }
}
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