création dynamique menu GUI

Questions à propos du GUI, y compris la partie script.
Avatar de l’utilisateur
Antoine
Messages : 18
Inscription : 06 Juin 2013 10:15
Localisation : Rennes / Troyes

création dynamique menu GUI

Message par Antoine » 13 Juin 2013 17:33

Bonjour,
Voilà je me lance pour mon premier post ici avec un petit problème qui me pourri la vie (comprendre me ralenti dans mon projet).

Alors l'idée est de construire un menu en fonction de fichier qui ce trouve dans un dossier. Les fichiers ont un nom du type : CATEGORIE_Couleur.jpg (pour changer les texture du Gameobject mais la n'est pas le souci)
J'arrive à créer des GUI.Button avec la première partie du nom genre dans une GUI.Box j'ai CATEGORIE1, CATEGORIE2 etc...
Ensuite l'idée est que pour chaque catégorie quand je clique sur le bouton, une box s'ouvre avec un bouton par couleur qui sont dans CATEGORIE1.

Donc naturellement des boucles, mais je butte sur le fait que la fonction OnGUI est appelée une fois par frame.
je stock la catégorie de chaque fichier dans un tableau (qui est rangé dans l'ordre [toutes les CATEGORIE1 sont à la suite] alphabétique du dossier).
Et je crée une liste dans laquelle je stockerais un index pour chaque couleur comme ça je sait que tout les 0 appartiennent à la première catégorie et ainsi de suite

GUI.Button(new Rect(10, 30, 120, 30),catego[0]);
for(int k=0; k<=20; k++){
indexCouleur.Add(cpt);
if(catego[k] != catego[k+1]){
GUI.Button(new Rect(10,30+(position*init), 120, 30),catego[k+1]);
cpt++;
}
}

Problème Je ne sort jamais de la boucle for et la liste indexCouleur ce remplie donc infiniment.
Si je force la sortie mon GUI ne s'affiche plus... :oops:

J'espère que mon problème est assez bien expliqué (j'ai fais au plus simple) et clair pour pouvoir recevoir votre aide.
Simplicity is prerequisite for reliability.
Edsger W. Dijkstra

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: création dynamique menu GUI

Message par cayou66 » 13 Juin 2013 19:05

Salut,
je pense que dans un 1er temps il faut que tu utilises le retour de GUI.Button.
Ça te renvoi un bool vrai ou faux, selon si tu viens de cliquer sur le bouton.

Ensuite il faut un état, sous forme de liste (qui est elle aussi de taille variable, même taille que ton nombre de catégories, remplie avec des booléens).
Si tu cliques tu alterne l'état du bool correspondant (même index).

Code : Tout sélectionner


private int[] catego;
private bool[] categoState;

void Start()
{
  //j'admet qu'ici catego est déjà rempli
  categoState = new bool[catego.Length];
}

void OnGUI()
{
  foreach(int currentCategory in catego)
  {
    if(GUI.Button(new Rect(10, 30 + 35 * currentCategory, 120, 30),catego[currentCategory]))
    {
      categoState[currentCategory] = !categoState[currentCategory];
    }
    //Tu as vu j'ai utilisé currentCategory pour décaler visuellement les boutons
  }
  //Ensuite on parcours la liste des categoState
  foreach(int currentCategoryState in categoState)
  {
    if(currentCategoryState == true)
    {
      //Dessiner les couleurs de categories.
    }
  }
}

Je ne sais pas comment tu fais pour avoir les couleurs de catégories par catégorie, si c'est toujours le même nombre de couleur, etc...
Ça devrait te donner une piste à suivre, c'est très simple ce que tu veux faire, surtout avec le UI d'Unity.

Bon courage.

sephitoth
Messages : 495
Inscription : 06 Avr 2012 13:47
Localisation : toulouse

Re: création dynamique menu GUI

Message par sephitoth » 13 Juin 2013 19:07

le remplissage de ta liste ne doit se faire qu'une seule fois
et non a chaque exécution du OnGUI. Du coup, tu ajoute toutes tes catégorie a chaque passage dans le OnGUI, qui se rajoute a celle déjà dans la liste. ect ect
J'étais athée jusqu’à ce que je découvre que j'étais dieu !

Avatar de l’utilisateur
Antoine
Messages : 18
Inscription : 06 Juin 2013 10:15
Localisation : Rennes / Troyes

Re: création dynamique menu GUI

Message par Antoine » 14 Juin 2013 09:17

Merci de vos réponses. Je vais regarder ça aujourd'hui mais effectivement ça m'a l'air pas trop dur.
J'aurais peut être du plus réfléchir un peu plus avant de poster sur le forum :arrow:

Je vous tiens au courant de mes avancées.
Simplicity is prerequisite for reliability.
Edsger W. Dijkstra

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: création dynamique menu GUI

Message par cayou66 » 14 Juin 2013 15:22

Non non, tu montres que tu y a déjà pensé c'est suffisant (en tout cas pour moi) pour que tu puisses demander de l'aide.
Tu viens pas les mains dans les poches, c'est ce qui compte.

Avatar de l’utilisateur
Antoine
Messages : 18
Inscription : 06 Juin 2013 10:15
Localisation : Rennes / Troyes

Re: création dynamique menu GUI

Message par Antoine » 14 Juin 2013 15:56

J'ai oublié de répondre à ta question :
Je ne sais pas comment tu fais pour avoir les couleurs de catégories par catégorie, si c'est toujours le même nombre de couleur, etc...
Alors pour récupérer les catégorie et les couleurs je fonctionne comme ça :

Code : Tout sélectionner



private string[] fileName;
private string[] laCase;
private List<string> listCatego;
private List<string> listCouleur;

public static string[] GetFileNames(string path, string filter)
{
    string[] files = Directory.GetFiles(path, filter);
    for(int i = 0; i < files.Length; i++){
    	    files[i] = Path.GetFileNameWithoutExtension(files[i]);
    }
    return files;
}

fileName = GetFileNames("D:\\Antoine_projet\\Forbo\\TestUnity\\Assets\\Resources","*.jpg");

char[] splitters = new char[] { '_' };
for(int i=0;i<=fileName.Length;i++)
{
	laCase = fileName[i].Split(splitters);
	listCatego.Add(laCase[0]);
        listCouleur.Add(laCase[1]);
}
donc comme ça je récupère un liste avec la catégorie de chaque élément et une autre avec la couleur de chaque élément.
Ensuite je repasse mes listes dans des tableaux. Du coup j'ai testé ta méthode avec une list<string> à la place d'un int[] mais j'ai encore pas mal de problème ^^
Simplicity is prerequisite for reliability.
Edsger W. Dijkstra

Avatar de l’utilisateur
Antoine
Messages : 18
Inscription : 06 Juin 2013 10:15
Localisation : Rennes / Troyes

Re: création dynamique menu GUI

Message par Antoine » 03 Juil 2013 10:09

Bonjour,
Je reviens un peu sur ce projet et j'ai un problème, l'importation sur IOs... Je m'explique :

J'ai mon script pour récupérer mes textures avec le chemin "Assets\\Resources" qui fonctionne parfaitement sur PC.
Et bizarrement la pomme ne veut pas de ce chemin d'accès alors que l’arborescence du projet est exactement la même. Par contre ça fonctionne si je donne le chemin absolu ... Mais avec le chemin absolu lors de l'export pour Ipad ça ne fonctionne pas :D.

Alors j'ai du passer à côté de quelque chose je pense mais là je suis dans le flou apple-ien total.
Si quelqu'un à déjà eu ce problème ou si quelqu'un sait comment faire je suis preneur de toutes informations.

A vous les studios.
Simplicity is prerequisite for reliability.
Edsger W. Dijkstra


Avatar de l’utilisateur
Antoine
Messages : 18
Inscription : 06 Juin 2013 10:15
Localisation : Rennes / Troyes

Re: création dynamique menu GUI

Message par Antoine » 05 Juil 2013 09:57

Je fais comme ça : <path to player app bundle>/<AppName.app>/Data comme indiquer pour Iphone mais il ne trouve pas mes images.
Simplicity is prerequisite for reliability.
Edsger W. Dijkstra

Répondre

Revenir vers « L'interface GUI »