[DB] Transform.x incrémentation non voulu

Pour les scripts écrits en C#
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
skyfyx
Messages : 15
Inscription : 14 Avr 2020 01:53

[DB] Transform.x incrémentation non voulu

Message par skyfyx » 15 Juil 2020 22:57

Bonjour,

J'ai un soucis pour déplacer un élément de mon App. En faite c'est pas tant que j'y arrive pas, car j'ai cherché pas mal avant de poster ce sujet.

Le problème c'est qu'avec toutes les solutions que je trouve j'obtiens toujours une incrémentation de ma position X qui fait que mon objet se déplace à chaque appel... C'est un pop-up que j'appelle avec une fonction lors de la créer d'un champ.

Voici le code:

Code : Tout sélectionner

// je récupère la width de mon élément pour le positionner à coter d'un élément. 
// Je fais ça car mon élément n'a pas une taille fixe. ( c'est un text )
float popupWidth =  popUp.GetComponent<Text>().preferredWidth;
// je divise par deux pour le placer correctement en X
float xPos = popupWidth /2;

// je créer le Vecteur sans changer Y et Z car je n'ai pas besoin d'y toucher
Vector3 temp = new Vector3(xPos, 0, 0);
// je change ma valeur alors la oui c'est évident le += incrémente à chaque appel,
// mais si je met '=' le posX de mon élément ne change pas
popUp.transform.position += temp;
J'ai vraiment besoin d'un expert avec unity car je débute sur unity ( pas en code ça fait 15ans ) et je suis un peu perplexe.


Merci.

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

Re: [DB] Transform.x incrémentation non voulu

Message par boubouk50 » 16 Juil 2020 08:16

Je ne comprends pas du tout ton problème.

Tu souhaites uniquement affecter la position x, tout en gardant y et z?
Il te suffit donc de créer le vecteur temp (renommé offsetPos pour plus de justesse de le nommage) avec ces valeurs puis d'affecter la position:

Code : Tout sélectionner

Vector3 offsetPos = popUp.transform.position;
offsetPos.x = xPos;
popUp.transform.position = offsetPos;
"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

skyfyx
Messages : 15
Inscription : 14 Avr 2020 01:53

Re: [DB] Transform.x incrémentation non voulu

Message par skyfyx » 16 Juil 2020 09:36

Bonjour,

J'ai déjà tester cette solution, bizarrement la valeur de xPos n'est pas affectée à mon GameObject. X quand je lance la fonction est inchangé ( j'ai tenter un log pour voir si j'allais bien au bon endroit et oui ). Je sais pas si le faite que mon GameObject soit un UI Text change quelque chose.

## Rectification, la valeur de X est bien affecté mais par exemple si je lui assigne 150 il sera à -489, peut être il prend en compte le parent ( un panel ). D'ailleurs la valeur de ma pos X est variable, elle peut passer de -489 à -471 comme -469 etc ##

Oui X et Y resteront inchangés l'app est en 2D et j'ai juste besoin de décaler le texte en fonction de la taille de son parent ( aligné sur sa droite ) et en fonction de la taille de mon Text (celui que j'essaye de faire bouger. Je lui ai mis un Content Size Fitter pour que la taille s'adapte au texte, je mesure ça taille et le place en fonction, enfin j'essaye).

Je déclare mon objet tel quel:

Code : Tout sélectionner

public GameObject popUp;
Et ensuite je glisse le GameObject sur le script.

Merci de l'aide ;)

ps: Merci pour la précision sur la nomenclature.

vex
Messages : 12
Inscription : 25 Août 2018 21:52

Re: [DB] Transform.x incrémentation non voulu

Message par vex » 20 Juil 2020 01:20

Je ne suis pas sûr d'avoir compris, si c'est un Text que tu souhaites positionner (qui utilise un RectTransform) il vaut mieux utiliser RectTransform.anchoredPosition

Si tu souhaites positionner un gameobject qui a une position dans ta scène et le positionner par rapport à la caméra il me semble qu'il manque un ScreenToWorldPoint, ou WorldToScreenPoint (à chaque fois je m'y perds :gene: ). Les X/Y de la caméra ne pas les mêmes que les X/Y dans une scène et actuellement j'ai l'impression que tu modifies la position dans la scène et non pas à l'écran. Voir la liste des fonctions du style ScreenToWorldPoint/WorldToScreenPoint/ViewportToScreenPoint etc.., ça peut peut-être corriger ton souci: https://docs.unity3d.com/ScriptReference/Camera.html

Si c'est de la 2D, tu peux utiliser Vector2 plutôt que Vector3 (Unity convertit automatiquement mais c'est plus propre).
S'il s'agit d'une position par rapport au parent, plutôt utiliser transform.localPosition.

Sinon, est-ce que tu peux envoyer un screenshot de ta scene et de ce que tu souhaites faire, j'ai un peu de mal à comprendre, ou même un schema sous paint pour essayer de reproduire sur mon pc et il me faudrais plus d'éléments pour pouvoir voir ce que tu souhaites faire à quels éléments.

skyfyx
Messages : 15
Inscription : 14 Avr 2020 01:53

Re: [DB] Transform.x incrémentation non voulu

Message par skyfyx » 23 Juil 2020 11:09

Bonjour,

D'abord désolé de la réponse tardive. Mais du coup le "transform.localPosition" m'a été ultra utile, c'est exactement ce que je cherchais. Mettre un texte à droite d'un autre texte ( celui ci ayant une taille variable ).
Un énorme merci à vous deux ;)

Répondre

Revenir vers « (C#) CSharp »