création dynamique menu GUI
création dynamique menu GUI
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...
J'espère que mon problème est assez bien expliqué (j'ai fais au plus simple) et clair pour pouvoir recevoir votre aide.
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...
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
Edsger W. Dijkstra
Re: création dynamique menu GUI
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).
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.
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.
}
}
}
Ç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.
Re: création dynamique menu GUI
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
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 !
Re: création dynamique menu GUI
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
Je vous tiens au courant de mes avancées.
J'aurais peut être du plus réfléchir un peu plus avant de poster sur le forum
Je vous tiens au courant de mes avancées.
Simplicity is prerequisite for reliability.
Edsger W. Dijkstra
Edsger W. Dijkstra
Re: création dynamique menu GUI
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.
Tu viens pas les mains dans les poches, c'est ce qui compte.
Re: création dynamique menu GUI
J'ai oublié de répondre à ta question :
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 ^^
Alors pour récupérer les catégorie et les couleurs je fonctionne comme ça :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...
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]);
}
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
Edsger W. Dijkstra
Re: création dynamique menu GUI
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 .
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.
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 .
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
Edsger W. Dijkstra
- artemisart
- Messages : 1893
- Inscription : 21 Juin 2011 19:51
- Localisation : Centre
- Contact :
Re: création dynamique menu GUI
Salut,
Tu récupère le chemin absolu comment ?
http://docs.unity3d.com/Documentation/S ... aPath.html ?
http://docs.unity3d.com/Documentation/S ... aPath.html ?
Tu récupère le chemin absolu comment ?
http://docs.unity3d.com/Documentation/S ... aPath.html ?
http://docs.unity3d.com/Documentation/S ... aPath.html ?
Re: création dynamique menu GUI
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
Edsger W. Dijkstra