Créer un Raycast qui part de la camera en direction du pointeur de la souris. [Résolu]

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Créer un Raycast qui part de la camera en direction du pointeur de la souris. [Résolu]

Message par Xann_71 » 29 Juin 2016 00:36

Bonsoir. Comme mon titre l'indique j'aurais besoin d'un petit conseil pour les RayCast que je ne maîtrise pas encore.
Pour poser le sujet, j'essaye de réaliser un tower défense 3D en m'inspirant d'un tutoriel trouvé sur youtube.
J'ai donc un sol composé de plusieurs dalles et j'aimerais que ces dalles changent de couleur lorsque je passe ma souris dessus.
J'ai essayé le MouseOver(), malheureusement une fois les tourelles créées, la souris entre en contact avec le collider des tourelles et non plus des dalles. J'ai donc trouvé des sujets sur internet qui proposaient de créer un raycast par rapport à la souris mais je ne suis pas parvenu à réaliser mon objectif.

J'ai ce script qui est lié à la caméra:

Code : Tout sélectionner

function Update () 
{ 
	var direction = Input.mousePosition;	// variable qui reçoit la position de la souris.
	var hit: RaycastHit;		// variable qui permet de détecter les collision
         
	if(Physics.Raycast(transform.position, direction, 100)) // On lance un rayon qui part de la camera, qui prend la direction du pointeur de la souris et qui a pour longueur 100.
	{
		if(hit.collider.gameObject.tag == "sol")	// Si le rayon touche un objet dont le tag est "sol".
		{
			hit.collider.gameObject.GetComponent.<MeshRenderer>().material.mainTexture = texOk;		// Alors on modifie la couleur de la dalle.
		}
	}
}
Mais lorsque je lance le jeu, la couleur des dalles ne change pas lorsque je les survol. Quelqu'un voit il une erreur dans mon code ou aurait une solution à me proposer?
Merci d'avance.
Dernière édition par Xann_71 le 29 Juin 2016 10:03, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6224
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Créer un Raycast qui part de la camera en direction du pointeur de la souris.

Message par boubouk50 » 29 Juin 2016 08:13

Salut Pono,

Ne serait-ce pas tout simplement la distance de Raycast qui est trop faible?

Code : Tout sélectionner

 if(Physics.Raycast(transform.position, direction, 100)) // On lance un rayon qui part de la camera, qui prend la direction du pointeur de la souris et qui a pour longueur 100.
Tes dalles ont bien le tag sol?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Créer un Raycast qui part de la camera en direction du pointeur de la souris.

Message par Xann_71 » 29 Juin 2016 08:44

Bonjour, je pensais ma région perdu au millieu des (petites) montagnes ^^ mais pas si perdu que sa finalement. Mes dalles ont bien le tag sol effectivement et je viens d'essayer avec une longueur de 10 000 pour le raycast mais toujours pas de résultat.
On est d'accord que

Code : Tout sélectionner

Input.mousePosition
donne la position de la souris sur le clan sans que j'ai besoin de cliquer? (de toute façon même en cliquant les dalles ne changent pas de couleur).

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6224
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Créer un Raycast qui part de la camera en direction du pointeur de la souris.

Message par boubouk50 » 29 Juin 2016 08:53

J'avais survolé ton code:
La doc: https://docs.unity3d.com/ScriptReferenc ... ycast.html
var direction = Input.mousePosition;, c'est la position de ta souris à l'écran, rien à voir avec une direction.

Dans les exemples de la doc, tu as: (attention c'est du C#)

Code : Tout sélectionner

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //reconstruit le vecteur direction en 3D depuis l'écran vers le monde
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 100)) 
            Debug.DrawLine(ray.origin, hit.point);
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Créer un Raycast qui part de la camera en direction du pointeur de la souris.

Message par Xann_71 » 29 Juin 2016 09:27

Ok, j'avais essayé le screenPointToRay hier soir mais j'ai mal du l'utiliser. Effectivement j'étais en cours de debug, j'ai pu afficher mon raycast pour m'apercevoir que premièrement, il pointait dans la direction opposée (vers l'arriere de la camera) et deuxièmement, il restait bloqué dans la ligné de l'axe z (peut importe les déplacement de ma souris, son seul mouvement etait une rotation sur l'axe x).
J'essaye avec le screenPointToRay et je te tiens au courant.

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Créer un Raycast qui part de la camera en direction du pointeur de la souris.

Message par Xann_71 » 29 Juin 2016 10:02

C'est parfait, sa fonctionne beaucoup mieux avec le bon script. Bon sa n'a pas arrangé mon problème car finalement le raycast doit toujours s'arrêter au premier collider ou trigger qu'il croise ce qui fait que lorsque j'ai une tourelle sur la map, toutes les cases autour (qui sont donc derrière le trigger de détection de la tourelle) sont inaccessibles au raycast. J'en reviens donc au même problème qu'avec le OnMouseOver() Mais sa c'est un autre sujet.
Juste une petite question pratique, Le OnMouseOver() n'utiliserait pas un raycast justement? Si oui j'ai acquis des connaissances mais elles me sont inutiles dans ce projet^^.

Edit: Pour ceux que sa peut intéresser, j'ai trouvé une solution afin qu'un objet n'interfère pas sur le raycast. Dans l'inspector de l'objet en question, il suffit de régler l'option "Layer" (à côté de "tag") sur Ignore raycast. Évidement l'objet ignorera tout les raycast donc dans jeu comme un fps sa peut poser des problèmes mais dans mon cas c'est pile ce qu'il me fallait.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6224
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Créer un Raycast qui part de la camera en direction du pointeur de la souris. [Résolu]

Message par boubouk50 » 29 Juin 2016 12:47

En cherchant un peu sur la doc, tu avais aussi la fonction RaycastAll () qui te renvoie tous les objets intersectés.
Pour ce qui est du OnMouseOver (): https://docs.unity3d.com/ScriptReferenc ... eOver.html
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Verrouillé

Revenir vers « (Js) Javascript »