RESOLU [DB-AL] fermer un menu au clic en dehors

Questions à propos du GUI, y compris la partie script.
lauraneb
Messages : 30
Inscription : 01 Juin 2017 14:14

RESOLU [DB-AL] fermer un menu au clic en dehors

Message par lauraneb » 01 Juin 2017 14:49

bonjour
grand debutant sur unity5, j'ai un menu avec des infos qui s'affiche quand on clique sur l'objet. Pour eviter que le menu reste afficher j'ai un button "exitbutton" mais je cherche aussi à le masquer quand on clique a l'exterieur du panel. apres quelque lectures sur ce forum, j'ai compris que ça ne servait a rien de le mettre dans update. Je sais afficher ou masquer le menu ; par contre je ne vois pas comment lui dire "si le clique se fait à l'exterieur du panel". l'idée est de délocker la souris quand on est OnMouseEnter ou OnMouseDown sur un game object et de la relocker quand on quitte le menu des actions possibles. je n'exlue pas la possibilité que je reflechis mal la problematique ;).

Code : Tout sélectionner

private void ExitCanvas()
    {
        if (Input.GetButtonDown(ExitButton))
        {
            CursorLockMode.Locked;
            Cursor.visible = false;
            displayCanvas.SetActive(false);
        }
        if //clic en dehors du GameObject Panel
        {
        displayCanvas.SetActive(false);
        }
    }
merci pour les réponses
Dernière édition par lauraneb le 02 Juin 2017 14:20, édité 2 fois.

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: [DB-AL] fermer un menu au clic en dehors

Message par simonj » 01 Juin 2017 15:05

Salut,

Si tu utilises le système de Canvas, tu peux mettre un component "Button" sans mettre d'image, ni aucune transition, qui prends tout ton écran et qui se trouve derrière tes menus.

Et relier l'événement click à une fonction "QuitPanel" que tu auras écris dans ton script. C'est assez simple du coup ;)

lauraneb
Messages : 30
Inscription : 01 Juin 2017 14:14

Re: [DB-AL] fermer un menu au clic en dehors

Message par lauraneb » 01 Juin 2017 15:37

l'idée est interessante mais j'ai plusieurs objets qui sont cliquables et si je fais ta proposition ce bouton empechera d'ouvrir le menu puisque le bouton de fermeture sera toujours cliqué de ce fait :)

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: [DB-AL] fermer un menu au clic en dehors

Message par simonj » 01 Juin 2017 17:22

Je ne comprends pas.

Selon la configuration de tes menus effectivement il faut désactiver/activer aussi le background cliquable ou en mettre plusieurs si tu as plusieurs écrans. Mais ça ne me semble pas réellement être un problème... Peut être que je ne comprends pas bien ce que tu veux faire exactement. Mais il me semble très facile d'adapter ce système avec des configurations de menu très variés (Soit un seul objet, soit plusieurs objets, soit des objets créés dynamiquement, ...)

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

Re: [DB-AL] fermer un menu au clic en dehors

Message par boubouk50 » 01 Juin 2017 17:37

Et tu peux faire en sorte que tes éléments d'UI soient bloquant ou non, donc gérer ce que est cliquable devant ou derrière.
"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

lauraneb
Messages : 30
Inscription : 01 Juin 2017 14:14

Re: [DB-AL] fermer un menu au clic en dehors

Message par lauraneb » 01 Juin 2017 23:22

boubouk50 c'est bien ce que j'essaye de faire avec mon panel mais mon niveau est un peu trop debutant ... ou alors tu es train de me dire que c'est c'est une case à cocher dans unity (que j'ai pas vu, la case hein pas unity) et là je vais devenir verte parce que ça fait un moment que je tourne le probleme. du coup j'ai été voir le canvas qui sur le raycaster qui a un "blocking objects" qui est sur none et un "blocking Mask" qui est sur everything... par contre je ne comprends pas leur fonctionnement et si c'est ça dont tu parles. je sais pas pourquoi mais j'ai le sentiment que tu vas pas tarder à m'apprendre que tous les tutos que j'ai regardé pour ecrire le code ne sont pas utiles dans mon cas.

simonj c'est peut etre moi qui m'y prend mal : je suis en fps (mouselocked) et quand je clique sur certains gamesobjects, j'affiche mon canvas (screenspace overlay) et un menu info avec des boutons actions qui me donne le texte sur l'objet. jusque là pas de probleme et le texte varie bien en fonction de l'objet cliquable. ma souris est delockée me permettant de cliquer sur les boutons. l'un des boutons est un exit du menu. ce que je cherche a faire est si le visiteur clique ailleurs que sur le menu (c'est a dire sur aucun des objets cliquables), le menu est fermé.

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

Re: [DB-AL] fermer un menu au clic en dehors

Message par boubouk50 » 02 Juin 2017 09:15

lauraneb a écrit :simonj c'est peut etre moi qui m'y prend mal : je suis en fps (mouselocked) et quand je clique sur certains gamesobjects, j'affiche mon canvas (screenspace overlay) et un menu info avec des boutons actions qui me donne le texte sur l'objet. jusque là pas de probleme et le texte varie bien en fonction de l'objet cliquable. ma souris est delockée me permettant de cliquer sur les boutons. l'un des boutons est un exit du menu. ce que je cherche a faire est si le visiteur clique ailleurs que sur le menu (c'est a dire sur aucun des objets cliquables), le menu est fermé.
Pour cela j'ai la solution: EventSystems.EventSystem.IsPointerOverGameObject.
L'exemple de la doc est exactement ce que tu décris. :-D
Pour ce qui est du Canvas et des Component d'UI, je ne suis plus sous Unity depuis quelques mois, mais de souvenir oui, tu peux gérer les calques bloqués ou non, les objets, les raycasts target. Ainsi, créer des "couches" de zones cliquables. Mais là, ce n'est plus qu'un souvenir de l'avoir fait.
"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

lauraneb
Messages : 30
Inscription : 01 Juin 2017 14:14

Re: [DB-AL] fermer un menu au clic en dehors

Message par lauraneb » 02 Juin 2017 09:38

boubouk50 merci ça semble en effet correspondre à mes besoins. mais est ce une obligation de le mettre dans le update, sachant que ça demande de ce fait de la ressource... si j'ai bien compris, il va verifier sur chaque frame si il il y a eu un clic en dehors du gameobject et executer la commande si la condition a eu lieu. or il n'a pas besoin de le faire si le menu est déja fermé... donc si je comprends bien il faut que je cree une autre condition menu ouvert ou fermé afin de lancer la fonction seulement quand le menu est ouvert ou plutot ne pas la lancer si le menu est deja fermé

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

Re: [DB-AL] fermer un menu au clic en dehors

Message par boubouk50 » 02 Juin 2017 09:59

Si tu veux ne pas passer par l'Update (), tu dois passer donc par un Event créer par un clic de souris, je suppose. J'ai une connaissance de la documentation à force d'aider plus que de programmer, et je ne suis pas encore au point là-dessus, je t'avouerai... Je risque de dire des bêtises.
OnMouseDown () est dépendant du GameObject où est placé le script, donc je ne pense pas que tu puisses l'utiliser.
Input.GetMouseButtonDown () n'est pas un Event, donc doit (peut) être utilisé dans Update () pour le tester à chaque frame.
Tu as EventSystem, Event.button, EventType.MouseDown... Mais je ne vois pas comment les utiliser snas Update () ou OnGUI ().
Je ne vois pas sinon créer son Event, mais là je ne sais pas faire.
"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

lauraneb
Messages : 30
Inscription : 01 Juin 2017 14:14

Re: [DB-AL] fermer un menu au clic en dehors

Message par lauraneb » 02 Juin 2017 10:04

du coup je me suis dit que ces fonctions n'ont rien a voir avec l'information des objets je l'ai donc sorti du script qui gere ces informations pour un en faire un script interactionobjets qui gere la visibilité de la souris et du canvas. et qui sera ajouter comme component des objets cliquables. et bien entendu ça ne marche plus ;)...

mais je comprends mieux pourquoi certaines choses ne fonctionnait pas quand on comprend ça :
Input.GetMouseButtonDown () n'est pas un Event
;)

je ne suis pas codeur non plus, et le code va meme à l'encontre de mon fonctionnement naturel (je fais de la systemique et je suis inge designer) donc j'en brasse pas mal quand meme ;) qui plus est on trouve beaucoup d'info pour s'entretuer sur unity (faire un first person shooter) et c'est pas vraiment ce qui m'interesse me me foutre sur la tronche avec d'autres (meme si j'ai empreinter pas mal d'idées à ce concept

Répondre

Revenir vers « L'interface GUI »