Menu
CoddyTech

RaycastHit

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

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 le point du 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 accèdes à tout ce 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 à l’arme : un point rouge à l’endroit où le laser touche.

  1. Dans Update(), lance Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range).
  2. Lorsqu’il touche quelque chose, appelle dot.gameObject.SetActive(true); et définis dot.position = hit.point;.
  3. Lorsqu’il ne touche rien, appelle dot.gameObject.SetActive(false);.

Appuie sur « Jouer » et tourne l’arme : le point glisse sur le mur et les caisses. Puis appuie sur « Vérifier ».

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.
    }
}

Toutes les leçons de Physique et gameplay

Entraînez-vous par vous-même : Playground Unity