Transmettre à Update le clic sur GUI

Questions à propos du GUI, y compris la partie script.
Nihilivin
Messages : 15
Inscription : 05 Sep 2014 16:18

Transmettre à Update le clic sur GUI

Message par Nihilivin » 26 Sep 2014 01:10

Bonjour!
J'ai un petit problème... J'ai un script GUI, en l’occurrence un menu, qui me permet de placer des objets. Au clic, j'active bien la fonction de placement, et au clic suivant sur le terrain, mes objets apparaissent... Mais comment faire pour que ma fonction Update(), qui pose donc les objets, n'en rajoute pas un nouveau lors du clic sur le GUI?

C'est à dire que je voudrai que le GUI soit interprété AVANT Update() et puisse lui dire "nan t'occupe, c'est pour moi", au lieu que les deux l'interprètent... J'ai essayé de faire un booléen mis à True lors du clic sur l'un des éléments du GUI, puis remis à 0 à chaque début de frame, et utiliser ce booléen dans mon update, mais sans succès. La seule solution que je vois faisable en l'état c'est de définir une liste de rectangles testés par Update() définissant les zones à exclure... Mais c'est vraiment pas pratique.

Merci par avance

Nihilivin

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

Re: Transmettre à Update le clic sur GUI

Message par boubouk50 » 26 Sep 2014 09:20

Ne peux-tu pas utiliser les layers?
Si tes éléments de GUI font partie d'un layer spécifique, lors de ton clic, tu testes si l'objet cliqué appartient à ce layer pour définir 2 cas: Gui ou pas Gui.
"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

Pico57
Messages : 576
Inscription : 19 Fév 2013 16:30
Localisation : Cluny

Re: Transmettre à Update le clic sur GUI

Message par Pico57 » 26 Sep 2014 10:41

Pour un problème similaire, j'avais créé une zone cliquable supplémentaire invisible qui prenait tout mon écran sauf la bordure avec mes boutons. Puis au lieu d'intéragir avec l'environnement dans l'update, je le faisais après mon if(le_bouton_invisible).

Nihilivin
Messages : 15
Inscription : 05 Sep 2014 16:18

Re: Transmettre à Update le clic sur GUI

Message par Nihilivin » 26 Sep 2014 12:27

Ok, je vais tester la méthode des layers... Ils peuvent se supperposer alors? J'vais faire mes petites recherches. L'autre méthode, je ne suis pas contre, mais étant donné que mon GUI est un peu partout et pas dans un unique bloc rectangulaire c'est très peu pratique...

Nihilivin
Messages : 15
Inscription : 05 Sep 2014 16:18

Re: Transmettre à Update le clic sur GUI

Message par Nihilivin » 26 Sep 2014 12:46

boubouk50 ta solution m'intéresse, mais je ne vois pas comment la mettre en oeuvre sachant que mon GUI se trouve dans la fonction OnGUI()... J'ai bien vu des trucs mais c'est pour les GameObjects, et le GUI je sais pas si c'en est un... Tu peux me montrer un petit exemple s'il te plait?

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

Re: Transmettre à Update le clic sur GUI

Message par boubouk50 » 26 Sep 2014 13:23

Je peux pas trop t'aider, je suis pas calé en GUI, généralement je fais tout en GameObject.
Je ce que je peux dire: Quand tu fais un clic (avec OnMouseDown()), tu peux tester le layer de l'objet cliqué, s'il estd ans le Layer GUI (par ex) alors tu ne t'occupe que de la GUI, sinon tu places un objet.

Aussi j'ai trouvé cela: Click through GUI
"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

Pico57
Messages : 576
Inscription : 19 Fév 2013 16:30
Localisation : Cluny

Re: Transmettre à Update le clic sur GUI

Message par Pico57 » 26 Sep 2014 14:27

C'est vrai qu'en passant par OnGUI(), je sais pas trop non plus comment faire fonctionner des calques. Dans les layer, il y automatiquement un layer UI, est-ce que l'UI crée dans OnGUI se trace dedans ? je sais pas trop, c'est à tester.

Nihilivin
Messages : 15
Inscription : 05 Sep 2014 16:18

Re: Transmettre à Update le clic sur GUI

Message par Nihilivin » 26 Sep 2014 15:22

Bon, j'ai finalement réussit avec la technique bidon des rectangles donnant les zones réservées au GUI... Ca marche, mais cette liste doit être supprimée et rafraichie à chaque frame, je doute donc pas mal de son efficacité... Et j'ai pas pu passer par les Layers parce que, utilisant OnGui(), je passe par UnityGUI qui est... Bien différent ^^"

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

Re: Transmettre à Update le clic sur GUI

Message par boubouk50 » 26 Sep 2014 15:35

Franchement, je pense que y'a un moyen 20000 fois plus simple et plus efficace que cette méthode bourrine.
Cliquer est un événement, et y'a surement moyen de récupérer des infos sur le type/layer de l'objet cliqué. Passes par un rayCast, tu auras un hit qui te dira ce que tu as touché.
L'exemple que je t'ai filé le fait clairement. Tu fais un hit sur un layer, et tu vois si tu as touché un élément du layer ou pas ce qui te dit donc si tu as touché un élément de GUI ou pas.
"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

Pico57
Messages : 576
Inscription : 19 Fév 2013 16:30
Localisation : Cluny

Re: Transmettre à Update le clic sur GUI

Message par Pico57 » 26 Sep 2014 17:36

Le raycast est envoyé depuis la cam dans l'environnement 3D en général quand on veux cliquer dans la scène. Le souci est que ce rayon ne rencontrera pas le GUI créé via OnGUI qui doit être rendu différemment (je sais pas trop où d'ailleurs).

Répondre

Revenir vers « L'interface GUI »