Menu
CoddyTech

RaycastHit

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

Physics.Raycast peut aussi te dire ce qu’il a touché. Ajoute out RaycastHit hit après la direction : lorsque la méthode renvoie true, elle a rempli hit avec les détails. out permet à une méthode C# de renvoyer une valeur supplémentaire par l’intermédiaire d’une variable que tu lui fournis. Ce télémètre indique ce qu’il vise et à quelle distance cela se trouve lorsque tu appuies sur Espace :

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
        {
            Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
        }
    }
}

Orienté vers un mur dont la face avant se trouve à 12 unités, il affiche Wall is 12 units away. Les autres champs : hit.point est l’endroit dans le monde où le rayon a touché la surface, hit.normal est la direction vers laquelle la surface est orientée à cet endroit ((0, 1, 0) sur un sol plat), et hit.transform est le Transform de l’objet touché. Avec hit.collider.gameObject, tu peux accéder à tout autre élément qui le concerne, comme son tag.

Lis hit uniquement à l’intérieur du if. Lorsque le rayon ne touche rien, Raycast renvoie false et hit ne contient rien d’utile : son collider est null.

challenge icon

Défi

Moyen

Ajoute un viseur laser au pistolet. Le script LaserSight se trouve sur le pistolet, et l’Inspecteur lui attribue le dot rouge (un Transform) et une range de 15. Les flèches gauche et droite font pivoter le pistolet.

  • À chaque image, lance un rayon depuis le pistolet dans sa propre direction avant, sur une distance de range unités.
  • Lorsqu’il touche quelque chose, affiche le point et place-le exactement à l’endroit où le rayon a touché la surface.
  • Lorsqu’il ne touche rien, masque le point avec SetActive(false).

Le Dot se trouve sur la couche Ignore Raycast, donc le rayon traverse le point lui-même. Appuie sur Play et balaie le mur, la caisse et le tonneau avec le laser, puis clique sur Check.

Essayez vous-même

using UnityEngine;

public class LaserSight : MonoBehaviour
{
    public Transform dot;
    public float range = 15f;

    void Update()
    {
        // Place dot là où le laser rencontre une surface ; masque-le lorsque le laser ne touche rien.
    }
}
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