Page 2 sur 3

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 00:49
par boubouk50
Fais un effort, je t'ai indiqué où deux fois déjà. Relis!
Au bout d'un moment, c'est assez épuisant de ne faire que te donner les solutions...

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 09:46
par freepl
transform.LookAt dit de regarder l'objet défini par PointOnPath avec ses 3 rotations et ses 3 directions.
Itween lance le script Itween
PointOnPath demande un chemin, défini par le tableau tablist, et un pourcentage défini par fraction + 01.f.
Ce que je ne comprends pas c'est à quel moment lui donner la directive de rester vertical.

Code : Tout sélectionner

transform.LookAt(iTween.PointOnPath(tabtList, fraction + 0.1f));

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 10:45
par boubouk50
boubouk50 a écrit :
13 Nov 2019 18:08
Comme dit précédemment, il faut gérer "l'inclinaison" juste après le LookAt ()
Ce n'est pas assez explicite?

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 11:06
par freepl
MSG Reedite

J'avais bien compris mais je pensais qu'il fallait garder la suite ( itwenn...).

Juste avec transform.up

Code : Tout sélectionner

transform.LookAt(transform.up= Vector3.up);
le perso est bien vertical mais ne s'oriente pas selon le path
Z012.jpg
Z012.jpg (214.1 Kio) Consulté 3357 fois
Sur unity scripting, pour lookAt, il faut une cible et un paramètre vector.

J'ai ajouter la cible , pour moi c'est Donc Itween.....
Mais le résultat est le même ,le perso est bien vertical mais ne s'oriente pas selon le path

Code : Tout sélectionner

transform.LookAt((iTween.PointOnPath(tabtList, fraction + 0.1f)),transform.up= Vector3.up);

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 12:35
par boubouk50
Ok. Je vois maintenant où il y a mauvaise compréhension.
Quand je dis après, je parle après la ligne.
Tu laisses ton LookAt (iTween) pour orienter ton personnage face au path. Puis tu verticalises ton perso.

Code : Tout sélectionner

//Orientation face au path
transform.position = iTween.PointOnPath (tabtList, fraction);
//Rendre vertical le personnage
transform.up= Vector3.up;

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 13:34
par freepl
avec ta modif, le perso est enfin droit mais il ne se tourne pas dans la direction du path.
J'explique.
En gros j'ai un path plat qui va du nord au sud(1) et un autre du sud au nord avec escalier(2).

A la création des persos je crois qu'ils sont créées "face au nord".

Pour ceux qui suivent le path 2 vers le nord, il sont tournés dans le bon sens ( femme en gris )
Pour les autres ils sont tournés vers le nord, donc dos au déplacement ( femme en rouge)

la femme en bleue regarde dans le sens de son déplacement
La femme en rouge regarde "le dos" de son déplacement.
ceci est valable pour tous les objets, y compris les vl ( mais pour eux je garderai le script d'origine)

Image à t=0
Z014.jpg
Z014.jpg (289.62 Kio) Consulté 3322 fois
image à t + 2
Z015.jpg
Z015.jpg (101.03 Kio) Consulté 3322 fois

Edit
Je viens de tester en faisant tourner de 180° un chemin, c'est le bon raisonnement. Le persos gardent leur orientation

J'ai testé aussi un chemin à 90°.
Les persos gardent leur orientation ( de création ?).
Ils sont verticaux

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 16:21
par freepl
Je cherche de ce coté mais je ne trouve pas : lookAt dans la direction opposé.

https://answers.unity.com/questions/132 ... ction.html

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 16:40
par boubouk50
Je me suis relu, et j'ai vu que je n'avais pas repris la bonne ligne:
il faut mettre:

Code : Tout sélectionner

transform.up= Vector3.up;
ou

Code : Tout sélectionner

transform.rotation = Quaternion.FromToRotation(Vector3.up, Vector3.up);
après

Code : Tout sélectionner

transform.LookAt(iTween.PointOnPath(tabtList, fraction + 0.1f));
et pas après

Code : Tout sélectionner

transform.position = iTween.PointOnPath (tabtList, fraction);
(qui ne contient AUCUN LookAt, d'ailleurs).
Par contre, veille à repartir du code initial.
Aussi, il se peut que le code que je t'ai donné pour redresser le personnage verticalement ne soit pas fonctionnel. Il se pourrait qu'il réoriente le plan XZ.
Dans ce cas, l'idée est toujours valide, mais pas l'implémentation. Il faudrait voir à faire une rotation sur l'axe local X right (en admettant Y up et Z forward) pour l'aligner avec le Y up World, donc calculer l'angle par exemple et l'affecter.

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 16:57
par freepl
Merci de continuer m'aider.
Le résultat est identique.
J'ai tourné un path de 90°, le perso le suit bien mais ne s'oriente pas selon le path.

Les petites barres verticales sont le path de l'escalier tourné de 90°, les perso sont orientés vers "leur nord".
Z016.jpg
Z016.jpg (60.04 Kio) Consulté 3268 fois
Est-il possible, chose que je ne sais VRAIMENT pas faire, de récupérer les infos des transforms et simplement de remplacer par transform.up ?

Re: Personnage monte escalier mais sur path et doncmvt en dent de scie

Publié : 14 Nov 2019 17:16
par boubouk50
Donc, si tu enlèves la ligne, ils sont dans le bon axe mais pas verticaux, si tu la remets, il sont verticaux mais pas dans le bon axe?
Dans ce cas, c'est la ligne que je t'ai donné qui ne fait pas ce qu'on lui demande, je pensais qu'elle n'affecterait que le up du personnage alors qu'elle affecte tous les axes.
J'en reviens donc à ce que j'ai dit précédemment, il faut le réorienter d'une autre manière.
Soit en corrigeant le LookAt () soit en effectuant une rotation de ton personnage.
Pour corriger le LookAt (), il faudrait faire en sorte que le point donné soit sur le même plan horizontal, donc que la position Y soit identique à celle de ton personnage.
Quelque chose comme ça alors:

Code : Tout sélectionner

Vector3 direction =iTween.PointOnPath(tabtList, fraction + 0.1f);
direction.y = this.transform.position.y;
transform.LookAt(direction);
Tu remplaces donc le LookAt () actuel par ces 3 lignes. N'oublie pas de supprimer la ligne que je t'ai faite rajouter.