Créer un jeu avec Unity 3D

Souris et GameObjects

L'auteur

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Navigation

Tutoriel précédent : lire un son

 

Sommaire

 

Tutoriel suivant : les particules

II. Vidéo


Cliquez pour lire la vidéo


III. Ce qu'il faut retenir

III-A. Souris sur des GameObjects

III-A-1. Explication

La gestion de la souris sur des éléments de la scène n'est pas immédiate. En effet, la souris est en 2D (un point sur l'écran), alors que les objets dans le monde sont en 3D. Plus précisément, la souris peut avoir des coordonnées en pixels comprises entre 0 et la largeur de la fenêtre (et de même pour la hauteur). Par contre, les objets dans la scène ont des coordonnées pouvant aller de moins l'infini à plus l'infini et cela, pour les trois axes. Il faut donc réussir à interpréter les coordonnées de la souris (qui sont en 3D) pour les retranscrire dans la scène (qui est en 3D) afin de savoir sur quel objet le joueur clique réellement.

Bien que les objets sont en 3D dans le monde, ils sont affichés en 2D à l'écran. C'est le travail de la caméra. La classe Camera d'Unity 3D nous propose de faire l'inverse : créer un rayon à partir d'une position à l'écran. Le rayon débutera à la position de la caméra pour aller vers l'avant. Si ce rayon touche un objet, alors, le clic de la souris s'est effectué sur cet objet.

La fonction est ScreenPointToRay().

III-A-2. Créer un rayon par rapport à la position de la souris

Pour créer le rayon, nous allons utiliser la fonction ScreenPointToRay() de la classe Camera. Celle-ci nécessite les coordonnées sur l'écran à partir desquelles le rayon va démarrer. Pour obtenir les coordonnées de la souris, nous utilisons la classe Input.

 
Sélectionnez
#pragma strict

var rayMouse:Ray

function Update() {
    rayMouse = camera.ScreenPointToRay(Input.mousePosition);
}

III-A-3. Détecter si un clic est effectué sur un objet

Finalement, pour savoir si le rayon touche un objet, nous utilisons la fonction statique RayCast() de la classe Physics.

 
Sélectionnez
function Update() {
    rayMouse = camera.ScreenPointToRay(Input.mousePosition);
    
    if(Physics.RayCast(rayMouse))
    {
        Debug.Log("Souris sur un objet");
    }
}

IV. Commenter

Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum, ou encore, poser vos questions dans le forum Unity.

V. Remerciements

Nous remercions « ToutApprendre » pour l'élaboration et la réalisation de ces vidéos. Vous pouvez retrouver sa chaîne YouTube en suivant ce lien.

VI. Navigation

Tutoriel précédent : lire un son

 

Sommaire

 

Tutoriel suivant : les particules

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2014 Équipe rubrique 2D/3D/Jeux. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.