la classe Ray

Représente des rayons. Un rayon est une ligne infinie commençant à un point d'origine et allant dans une certaine direction.

Variables

directionLa direction du rayon.
originLe point d'origine du rayon.

Constructeurs

RayCrée un rayon commençant à l'origine le long de la direction.

Fonctions publiques

GetPointRetourne un point aux unités de distance le long du rayon.
ToStringRetourne une chaîne bien formatée pour ce rayon.

Ray.direction

public Vector3 direction;

La direction est toujours un vecteur normalisé. Si vous affectez un vecteur de longueur non unitaire, il sera normalisé.

Ray.origin

public Vector3 origin;

Le point d'origine du rayon.

Ray.Ray

public Ray(Vector3 origin, Vector3 direction);

Crée un rayon commençant à l'origine le long de la direction.

C#using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    void Start()
    {
        // Créer un rayon à partir de la position de transformation le long de l'axe z de la transformation.
        Ray ray = new Ray(transform.position, transform.forward);
    }
}

Ray.GetPoint

public Vector3 GetPoint(float distance);

Retourne un point aux unités de distance le long du rayon.

C#using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Ray r;
    void Example() {
        print(r.GetPoint(10));
    }
}

Ray.ToString

public string ToString();

public string ToString(string format);

Rayons de la caméra

Il est parfois utile d'avoir une représentation mathématique de cette ligne et Unity peut la fournir sous la forme d'un objet Ray. Le Ray correspond toujours à un point de la vue, de sorte que la classe Camera fournit les fonctions ScreenPointToRay et ViewportPointToRay. La différence entre les deux est que ScreenPointToRay s'attend à ce que le point soit fourni sous la forme d'une coordonnée de pixels, tandis que ViewportPointToRay prend des coordonnées normalisées dans la plage 0..1 (où 0 représente le bas ou la gauche et 1 représente le haut ou la droit de la vue). Chacune de ces fonctions renvoie un Rayon qui consiste en un point d'origine et un vecteur qui montre la direction de la ligne à partir de cette origine. Le rayon provient du plan proche plutôt que du point transform.position de la caméra.

Raycasting

L'utilisation la plus courante d'un rayon de la caméra consiste à effectuer un raycast dans la scène. Un raycast envoie un «rayon laser» imaginaire le long du rayon de son origine jusqu'à ce qu'il frappe un collisionneur dans la scène. L'information est ensuite retournée sur l'objet et le point qui a été frappé dans un objet RaycastHit. Il s'agit d'un moyen très utile pour localiser un objet basé sur son image à l'écran. Par exemple, l'objet à la position de la souris peut être déterminé avec le code suivant :

C#using UnityEngine;
using System.Collections;

public class ExampleScript : MonoBehaviour {
    public Camera camera;

    void Start(){
        RaycastHit hit;
        Ray ray = camera.ScreenPointToRay(Input.mousePosition);
        
        if (Physics.Raycast(ray, out hit)) {
            Transform objectHit = hit.transform;
            
            // Faire quelque chose avec l'objet qui a été frappé par le raycast.
        }
    }
}

Déplacement de la caméra sur un rayon

Il est parfois utile d'obtenir un rayon correspondant à une position d'écran, puis de déplacer la caméra le long de ce rayon. Par exemple, vous voudrez peut-être permettre à l'utilisateur de sélectionner un objet avec la souris, puis de le zoomer en le gardant "épinglé" sur la même position d'écran sous la souris (cela pourrait être utile lorsque la caméra regarde une carte tactique, par exemple). Le code pour le faire est assez simple :

C#using UnityEngine;
using System.Collections;

public class ExampleScript : MonoBehaviour {
    public bool zooming;
    public float zoomSpeed;
    public Camera camera;

    void Update() {
        if (zooming) {
            Ray ray = camera.ScreenPointToRay(Input.mousePosition);
            float zoomDistance = zoomSpeed * Input.GetAxis("Vertical") * Time.deltaTime;
            camera.transform.Translate(ray.direction * zoomDistance, Space.World);
        }
    }
}

les réactions

Pour laisser un avis, vous devez être inscrit et connecté

Se connecter