Problème d'affichage: objets cachés

Questions à propos du GUI, y compris la partie script.
Kacitron
Messages : 6
Inscription : 19 Nov 2016 16:57

Problème d'affichage: objets cachés

Message par Kacitron » 19 Nov 2016 17:15

Bonjour!

J'ai cherché dans google et n'ai trouvé aucune réponse à mon problème. Je suis actuellement les Tutoriel d'un youtuber sur Unity (NedFroy), et là il explique comment créer un menu. Mon problème n'est pas tellement avec les scripts, c'est plutôt qu'il y a plusieurs canvas (un pour les images en background, un pour les boutons du menu principal et un pour les options) et je ne sais pas pourquoi mais parfois les boutons (ou les textes) sont cachés derrière les images de fond.

Par exemple là il y a un Texte - Settings (seul, pas attaché à un bouton) qui n'apparaît pas à l'écran.

Image

Ma question est simple: comment faire pour que ce texte soit visible (après écrire le script pour le faire apparaître ou disparaître je peux le faire mais je veux pouvoir voir ce texte à tout moment sur ma scène)? Et d'une manière plus générale comment gérer ce qui est en premier plan et ce qui est en arrière plan? (j'ai essayé de modifier l'ordre des Canvas et ça n'a pas l'air de changer grand chose).

D'avance merci pour votre aide et votre temps.

Avatar de l’utilisateur
Pitou
Messages : 95
Inscription : 28 Juil 2015 20:08
Contact :

Re: Problème d'affichage: objets cachés

Message par Pitou » 19 Nov 2016 20:37

Salut,

Je ne sais pas ce que tu entend par "j'ai essayé de modifier l'ordre des Canvas", mais je suppose que c'est simplement l'ordre dans la hiérarchie.

Essai donc de jouer avec le "Sort Order" ou le "Order in Layer" du component "Canvas" ;-)
https://docs.unity3d.com/Manual/class-Canvas.html

Sinon, moi je m'y prend autrement pour faire mes menus. Je n'ai qu'un Canvas, mais dans celui-ci je fait des panels (sans images) qui contiennent tous les UI pour chaque "Vue" différente. Je les active en fonction de la vue voulue.
On dit LE WiFi ! Y'en a marre !

Kacitron
Messages : 6
Inscription : 19 Nov 2016 16:57

Re: Problème d'affichage: objets cachés

Message par Kacitron » 20 Nov 2016 13:32

Bonjour!

Je me sens un peu idiot à présent car j'ai pu trouver la solution tout seul (en regardant le tutoriel sur le site Unity). En fait il suffisait de trouver deux options (je ne me souviens pas de leur nom) qui se trouve dans l'inspector et de mettre sur "Overflow" ce qui affiche par-dessus. En ce qui concerne les images de fond (celle du menu et le fond d'écran) jouer avec la herarchy suffit pour gérer le second plan et l'arrière-plan.

Le sujet pour autant est-il devenu inutile?
Je vous laisse en décider.

Tout d'abord, merci à Pitou pour ta réponse (c'est gentil de prendre le temps de répondre). Je n'ai pas bien compris de quoi tu parles quand tu dis : Essai donc de jouer avec le "Sort Order" ou le "Order in Layer" du component "Canvas" (je ne l'ai pas trouvé, mais je suis débutant et j'ai du mal avec le logiciel Unity, peut-être que je le trouverai en cherchant plus).

En fait le plus simple c'est clairement d'avoir un seul canvas, sur ce point tu as raison.
Mais je suivais le tutoriel d'un youtuber et lui avait créé plusieurs canvas: un pour les options, un pour les images de fond et un pour les boutons. Et ensuite il a mis un script par canvas (en fait un script pour le canvas bouton et un script pour le canvas options). Il devait penser que ça serait plus simple d'organiser ainsi ses scripts.

Pour ma part j'ai quand même fait avec un seul canvas, le problème fut de faire le script adéquat (je ne sais pas coder j'ai du trouver la solution tout seul). J'ai pu faire le script pour chaque bouton (même pour le bouton Back) et la seule chose que je n'ai pas réussi à faire c'est un script pour le slider (qui gère le volume de la musique), je crois que c'est pareil que pour les autres scripts qui déterminent si un objet est affiché ou non mais je ne sais pas quel code il faut mettre pour indiquer que l'objet est un slider.

Maintenant j'ai quand même une autre question concernant l'affichage des canvas: j'ai essayé d'attacher un canvas à un personnage pour faire en sorte que si on met en place un menu pause, ce dernier apparaît en face du personnage, comme si le personnage regardait un écran. Et là ça devient difficile parce que le canvas apparaît perpendiculaire à la caméra et on ne peut pas modifier sa position. Et je n'ai pas l'impression qu'en bougeant le personnage le canvas bouge par rapport à lui. Avez-vous une solution pour que quelque soit la position du personnage lorsqu'on met en place un menu pause, celui-ci apparaisse toujours face au personnage?

"Sinon, moi je m'y prend autrement pour faire mes menus. Je n'ai qu'un Canvas, mais dans celui-ci je fait des panels (sans images) qui contiennent tous les UI pour chaque "Vue" différente. Je les active en fonction de la vue voulue."

Ca a l'air pratique. C'est facile à mettre en place ou bien faut-il quand même maîtriser un minimum?

Enfin en ce qui concerne les scripts:
-Peut-on avoir des scripts en java et des scripts en c# sur une même scène?
-Si oui cela pose-t-il des problèmes?
-Est-il plus simple de coder en java ou en c#?
-Un jeu est-il codable uniquement avec un seul langage? (sur Unity je parle).
-Si non y a-t-il des règles qui permettent de savoir ce qu'on doit coder en java et ce qu'on doit coder en c#sharp?

Je pose ces questions car ce youtuber que je suivais a utilisé un java script pour que le slider contrôle le volume de la musique (d'ailleurs je n'ai pas bien compris pourquoi il a utilisé un code alors qu'il suffit de mettre l'audio source -> volume dans la petite barre de script du slider).

Bon, je crois que j'ai fini (ouf!). Pardonnez le gros pavé, le style maladroit, et je vous souhaite un bon déjeuner!

Avatar de l’utilisateur
Pitou
Messages : 95
Inscription : 28 Juil 2015 20:08
Contact :

Re: Problème d'affichage: objets cachés

Message par Pitou » 20 Nov 2016 22:10

Salut !
Kacitron a écrit :Ca a l'air pratique. C'est facile à mettre en place ou bien faut-il quand même maîtriser un minimum?
Non, c'est pas très dur. Voici un exemple de code d'un de mes projet (simplifié) :

Code : Tout sélectionner

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;

public class MenuManager : MonoBehaviour {

    [SerializeField]
    private GameObject panelAccueil;
    [SerializeField]
    private GameObject panelCampain;
    [SerializeField]
    private GameObject panelOptions;

    void Start() {
        DisplayMainPanel();
    }

    public void DisplayMainPanel() {
        HideAllPanels();
        panelAccueil.SetActive(true);
    }

    public void DisplayLevelsPanel() {
        HideAllPanels();
        panelCampain.SetActive(true);
    }

    public void DisplayOptionsPanel() {
        HideAllPanels();
        panelOptions.SetActive(true);
    }

    void HideAllPanels() {
        panelAccueil.SetActive(false);
        panelCampain.SetActive(false);
        panelOptions.SetActive(false);
    }
    
   public void LoadScene(string sceneName) {
        SceneManager.LoadScene(sceneName);
    }
}
Les fonctions sont appelées par les buttons d'UI :
"DisplayOptionsPanel()" => Bouton "Options" depuis le panel "Accueil".
"DisplayLevelsPanel()" => Bouton "Levels" depuis le panel "Accueil".
"DisplayMainPanel()" => Bouton Retour sur tous les panels.
"LoadScene()" => les boutons des différents lvl disponibles dans le panel "Levels"
Voilà, c'est ma façon de faire mais il en existe d'autres ;)
Kacitron a écrit :Enfin en ce qui concerne les scripts:
-Peut-on avoir des scripts en java et des scripts en c# sur une même scène?
-Si oui cela pose-t-il des problèmes?
-Est-il plus simple de coder en java ou en c#?
-Un jeu est-il codable uniquement avec un seul langage? (sur Unity je parle).
-Si non y a-t-il des règles qui permettent de savoir ce qu'on doit coder en java et ce qu'on doit coder en c#sharp?
Dans l'ordre :
- Oui
- Sans doute
- Tout dépend de ce que tu apprends. Je ne pratique plus du tout le unityscript (ce que tu appelles "java") donc pour moi le C# est plus simple avec mon expérience ;)
- Bien sur, c'est ce que je fait pour ne pas m’emmêler les pinceaux entre différents langages.
- Je te conseil de tout coder en un seul langage, et je t'oriente vers le C# ^^

Et surtout, hésite pas à faire les tuto officiels d'Unity sur l'UI ! :)

PS : Ton soucis de canvas face au personnage mérite peut-être un peu plus de détails.
On dit LE WiFi ! Y'en a marre !

Kacitron
Messages : 6
Inscription : 19 Nov 2016 16:57

Re: Problème d'affichage: objets cachés

Message par Kacitron » 20 Nov 2016 23:27

Effectivement ton système de Panel est ultra simple et bien pensé! Je vais te le piquer ^^
Donc par exemple si je reproduis les panels et que dans le PanelSettings je mets le slider pour la musique, quand le PanelSettings est SetActive(false) le slider sera aussi caché? Ca évite bien des lignes de code tout ça! Nedfroy a du vouloir faire la même chose mais il l'a pas fait de manière ingénieuse (il a créé plusieurs canvas au lieu de regrouper les boutons sous des Empty, ce qui laisse un seul canvas).

Comme je dois apprendre à créer les divers composants pour mes jeux vidéos j'ai cherché quelques youtubers qui proposent des tutoriels et je les suis, mais certains codent en java tandis que d'autre code en c#, si on peut tout coder avec un seul langage vaut mieux se cantonner au plus simple (le c# apparemment).

Je pense que c'est bon mon problème d'affichage est bien résolu! Merci encore Pitou, super réponse!

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

Re: Problème d'affichage: objets cachés

Message par boubouk50 » 21 Nov 2016 10:54

TL;DR

Pour les canvas, le départ devrait être les Unity Learn UI qui te montrent TOUS les components d'UI et leur paramètres.
Tu as aussi la documentation officielle dédiée à l'UI.
Alors, oui, c'est en anglais et si tu viens sur un forum français, c'est peut-être que tu ne pannes rien à l'anglais. N'empêche, ça reste la doc officielle donc juste et impartiale (c'est à dire que c'est pas Lord@nus69_du59140 qui te fait un code à sa sauce, pas forcément comme il faut), et que tout y est expliqué et montré (dans les vidéos Learn). Et les outils de traduction en ligne sont légions.

Pour les canvas, dans le Component Canvas, la PREMIERE option disponible est RENDER MODE, soit MODE DE RENDU qui te propose 3 options:
Overlay, Screen-Space Camera, World Space. Soit traduction google: Superposition, Espace-Ecran Camera, Espace Monde. Comme leur nom l'indique, Overlay vient se superposer à l'écran, Screen Space Camera vient se poser devant la caméra (avec les réglages de celle-ci), Espace Monde le canvas est un objet dans le monde et n'est pas lié à la caméra. Bref, l'option que tu as l'air de rechercher. Il y a aussi une autre option juste dessous: Order In Layer (ordre dans les calques)...

Il te manque un petit peu de curiosité (ou bien de recherche) pour trouver la solution. Je veux dire par là, si tu as un problème de Canvas, regarde un peu les options du Component Canvas avant d'aller chercher de l'aide ailleurs (non pas que chercher de l'aide c'est mal, c'est pas ce que je dis), tu pourrais trouver la solution directement et avancer plus vite.

Un canvas ou plusieurs, c'est pas vraiment un souci, puisqu'on peut les trier. Mais il vaut mieux éviter dans utiliser trop, j'ai entendu dire que les performances s'en ressentaient grandement ressenties...
"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

Kacitron
Messages : 6
Inscription : 19 Nov 2016 16:57

Re: Problème d'affichage: objets cachés

Message par Kacitron » 21 Nov 2016 15:27

Je veux bien admettre que j'ai peu de curiosité et que je m'en remets souvent à quelqu'un quand je ne trouve pas de solution mais de mon point de vue après 15h par jour (x3) pour faire un menu, une première scène avec deux scripts qui se battent en duel plus un qui ne fonctionne pas je trouve ça très agréable d'obtenir un résultat si petit soit-il.

And by the way I'm perfectly fluent, although I'm having issues with computings terms which I have to get familiar with.
Et encore la connaissance des mots ne fait pas tout, faut-il savoir où se trouve quoi.

En tout cas les réponses qu'on m'apporte sont très helpful! Donc je vous remercie pour votre aide.

P.S: Et s'il y a la méthode Unity pour tout faire que je devrais plutôt suivre au lieu de suivre le youtuber lambda qui fait un tuto, et que cette méthode est meilleure, alors la confrontation des méthodes avec d'autres personnes qui ont l'expérience peut également m'apprendre sur la meilleure à adopter, n'est-ce pas? La discussion est toujours bénéfique!

ADD: suite à votre conseil d'aller consulter les tutoriels Unity j'ai commencé à regarder ceux sur les scripts. Je viens de voir qu'on pouvait "enable" ou "disable" des objets. Quelle est la différence avec la fonction SetActive? Dans quel cas vaut-il mieux utiliser l'un ou l'autre?

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

Re: Problème d'affichage: objets cachés

Message par boubouk50 » 21 Nov 2016 16:35

Kacitron a écrit :Je veux bien admettre que j'ai peu de curiosité et que je m'en remets souvent à quelqu'un quand je ne trouve pas de solution mais de mon point de vue après 15h par jour (x3) pour faire un menu, une première scène avec deux scripts qui se battent en duel plus un qui ne fonctionne pas je trouve ça très agréable d'obtenir un résultat si petit soit-il.
Ok. Je vois pas le lien entre demander ou non et la satisfaction d'un résultat. Autant y arriver tout seul peut en procurer plus, mais demander ne change pas grand chose.
Kacitron a écrit :And by the way I'm perfectly fluent, although I'm having issues with computings terms which I have to get familiar with.Et encore la connaissance des mots ne fait pas tout, faut-il savoir où se trouve quoi.
C'est écrit dans le menu du site Unity3D.com où tu l'as téléchargé: Learn ou Apprendre si tu as la traduction automatique.
Kacitron a écrit :En tout cas les réponses qu'on m'apporte sont très helpful! Donc je vous remercie pour votre aide.
Je t'en prie, nous sommes là pour ça ;-)
Kacitron a écrit :P.S: Et s'il y a la méthode Unity pour tout faire que je devrais plutôt suivre au lieu de suivre le youtuber lambda qui fait un tuto, et que cette méthode est meilleure, alors la confrontation des méthodes avec d'autres personnes qui ont l'expérience peut également m'apprendre sur la meilleure à adopter, n'est-ce pas? La discussion est toujours bénéfique!
C'est ce que j'ai fait en t'orientant dans un premier temps sur la doc et les Learns. Ce n'était pas pour te gronder mais pour te diriger.
Ça me paraît logique, lorsque tu prends en main un logiciel, de suivre les tutos et la doc officielle avant de te lancer dans le bain. Si en plus tu parles anglais, alors tu as encore moins de soucis.
Où, je veux en venir, et c'est un peu le reproche que l'on fait aux 'nouveaux', c'est que vous grillez les étapes et après vous êtes perdus. Alors que TOUT est expliqué depuis le début mais personne ne veut faire l'effort et tout le monde veut faire son jeu directement.
Alors on rabâche d'aller voir la doc et les Learns parce qu'ils sont là pour ça, et nous derrière on fait office d'explication. Par contre, on va pas le faire pour vous, le traduire entièrement, vous expliquer et tout le toutim.
Peut-être n'est ce pas ton cas, mais sur la vidéo de 2 minutes qui t'explique le Canvas (premier cours de l'UI quand même), tu as ta réponse. Et c'est par là que tu aurais dû commencer, comme je te le disais. Maintenant, tu as l'info, il te faut un poil plus de curiosité pour penser à aller trouver tes besoins dedans et hop! ça avancera plus vite pour toi.
Kacitron a écrit :ADD: suite à votre conseil d'aller consulter les tutoriels Unity j'ai commencé à regarder ceux sur les scripts. Je viens de voir qu'on pouvait "enable" ou "disable" des objets. Quelle est la différence avec la fonction SetActive? Dans quel cas vaut-il mieux utiliser l'un ou l'autre?
SetActive () active/désactive un GameObject. C'est une fonction.
.enabled active/désactive le Component sur lequel il est appelé (Attention, pas tous les Components). C'est une variable.
Donc, ça ne fait pas exactement la même chose. Désactiver un GameObject désactive tous ses Components et tous ses enfants (et tous leurs Components). Désactiver un Component n'affecte que ce Component.
"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

Memorial76
Messages : 31
Inscription : 14 Oct 2017 21:18
Localisation : France
Contact :

Re: Problème d'affichage: objets cachés

Message par Memorial76 » 19 Oct 2017 09:11

Bonjour à tous,
Je rebondis sur le sujet car j'ai un nouveau problème qui ne se posait pas avant. J'utilise aussi la méthode SetActive() pour afficher/cacher mes panels en fonctions de me besoins. Et j'ai un panel avec lequel ça ne marche plus depuis que j'y ai ajouté des images et du texte. Impossible de le réactiver une fois désactivé, je n'ai qu'un écran gris (ne correspondant même pas avec le fond du panel)...

Voici un screen de Unity quand le panel est sélectionné (pour info, celui affiché dans la scène n'est pas le panel en question mais celui dans l'inspector oui)

Image
Mon Blog sur la simulation :
MultiSim Project

Mes applications pour Android :
Dés de Perudo

Multi Dice Roller

Memory des Nombres

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

Re: Problème d'affichage: objets cachés

Message par boubouk50 » 19 Oct 2017 09:28

Que signifie un écran gris?
Est-ce le background? Est-ce la panel en question mais gris? Est-ce un autre panel gris? C'est forcément quelque chose.
Comment actives/désactives tu tes panels (code)?
"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

Répondre

Revenir vers « L'interface GUI »