Page 2 sur 3

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 27 Août 2017 22:07
par cortoh
Max a écrit :
27 Août 2017 19:00
Tiens, lien direct avec le sujet que tu avais ouvert en octobre 2015 --> viewtopic.php?t=11176
Oui je m'en souvient, la soltuion et la invoqué par Titan "this.transform.Translate(hit.normal * speed * Time.deltaTime)" j'ai pas saisi.

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 28 Août 2017 21:10
par Max
cortoh a écrit :
27 Août 2017 22:07
Oui je m'en souvient, la soltuion et la invoqué par Titan "this.transform.Translate(hit.normal * speed * Time.deltaTime)" j'ai pas saisi.
Dans ce cas, la solution consiste, non plus à passer par la fonction OnMouseDown pour la sélection de ton cube, mais par les Raycast. On va donc faire un lancé de rayon à partir de la position camera avec une direction qui sera 'fournis' par ton pointeur souris. En retour, si un objet se trouve sur la trajectoire de ce rayon (et qu'il possède un collider), nous aurons un certains nombre
d'information relative à l'objet 'touché' (dans ton cas normalement ton cube), comme le point d'impact, son nom, etc... mais aussi la normale de la face touchée (ne pas hésiter à utiliser les layers pour filtrer le raycast, cf la doc).
La normale de la face touché par le rayon correspondra donc à la direction à faire prendre à ce cube pour avancer.

En code, cela pourrait se traduire dans le principe par ce genre de chose, basé sur ce qui avait été dit en final dans le sujet de 2015:

Code : Tout sélectionner

	float speed = 8f; // pas de déplacement

	void Update()
	{
		RaycastHit hitInfo; 
		if (Input.GetMouseButtonDown(0))
		{
			if (Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hitInfo)) 
			{
				if (hitInfo.normal.y == 0)  // on ne veut pas des faces dirigées vers le haut/bas
				{
					transform.Translate (hitInfo.normal * speed );
				}
			}
		} 
	}
Pour plus d'élément sur l'emploie des Raycast, ne pas hésiter à se tourner vers les tuto du Learn, par exemple.

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 28 Août 2017 22:16
par ZJP

Code : Tout sélectionner

if (hitInfo.normal.y == 0)  ...
On cherche des ennuis avec des floats ?!! :mrgreen:

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 28 Août 2017 23:46
par Greg

Code : Tout sélectionner

if (Mathf.Approximately(hitInfo.normal.y, 0))
Mathf.Approximately ^^

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 29 Août 2017 06:16
par cortoh
Ok, je vais tenter de traduire ça en js et faire des essais ce soir, merci.

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 29 Août 2017 09:19
par Max
cortoh a écrit :
29 Août 2017 06:16
Ok, je vais tenter de traduire ça en js et faire des essais ce soir, merci.
ourf, section JS, j'avais oublié (étourdis à cette heure déjà tardive pour les vieux).
Sorry. Bon y'a pas grand chose à adapter ceci dit (et pis va falloir s'y mettre au C#, car bientôt bye bye le JS) ;)

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 29 Août 2017 17:18
par ZJP
Greg a écrit :
28 Août 2017 23:46

Code : Tout sélectionner

if (Mathf.Approximately(hitInfo.normal.y, 0))
Mathf.Approximately ^^
On en apprend tout les jours. ;-)

Cela dit, vu qu'il s’agit d'une fonction de l'API d'Unity, je reste sur les comparaisons de floats "classiques" .

Code : Tout sélectionner

if (Math.Abs(hitInfo.normal.y) < 0.01f)
...fera l'affaire. :mrgreen:

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 29 Août 2017 17:32
par Max
ZJP a écrit :
29 Août 2017 17:18
Cela dit, vu qu'il s’agit d'une fonction de l'API d'Unity, je reste sur les comparaisons de floats "classiques" .

Code : Tout sélectionner

if (Math.Abs(hitInfo.normal.y) < 0.01f)
...fera l'affaire. :mrgreen:
+1, et plus fiable à mon sens ( retour d'expérience de Mathf.Approximately, perfectible dans certains)
(si l'on voulais pinailler et l'écrire de façon académique -> if (Math.Abs(hitInfo.normal.y) < Mathf.Epsilon))
;)

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 29 Août 2017 17:51
par ZJP
+1 du +1 :mdr1:

Re: [DB-AL] Déplacer un objet à une certaine distance.

Publié : 29 Août 2017 19:30
par cortoh
Et bien du coup je vais continuer en C# vu qu'il faudra le faire tôt ou tard, j'ai monté une maquette avec ton bout de code, je tente de faire déplacer le cube en continue en fonction du variable mais je n'y arrive pas.
Sinon tu considères être vieux à partir de quel age ?