Transmettre à Update le clic sur GUI
Transmettre à Update le clic sur GUI
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
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
- boubouk50
- ModoGenereux
- Messages : 6216
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Transmettre à Update le clic sur GUI
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.
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Transmettre à Update le clic sur GUI
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).
Re: Transmettre à Update le clic sur GUI
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...
Re: Transmettre à Update le clic sur GUI
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?
- boubouk50
- ModoGenereux
- Messages : 6216
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Transmettre à Update le clic sur GUI
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
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Transmettre à Update le clic sur GUI
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.
Re: Transmettre à Update le clic sur GUI
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 ^^"
- boubouk50
- ModoGenereux
- Messages : 6216
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Transmettre à Update le clic sur GUI
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.
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Transmettre à Update le clic sur GUI
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).