Page 1 sur 1

Enum Operateur

Publié : 12 Mai 2021 19:59
par EmileF
Bonjour à tous,

Je cherche à créer un enum genre

public enum Operateur { +, -, *, /};

Je voudrais utiliser cet enum dans un éditeur pour l'inspector.

C# n'accepte pas ce genre d' enum, il lui faut des strings. Même si je mets ces valeurs entre guillemets ça ne marche pas.
Est-ce que quelqu'un connaitrait un moyen de créer un dropdown dans l'inspecteur, permettant de sélectionner ces opérateurs. C'est vrai qu'il me suffirai de créer un champ texte pour taper l'opérateur au clavier mais je préfère pour des raisons de commodité le sélectionner dans une liste déroulable.

Peut-être que quelqu'un connait une solution
merci

Re: Enum Operateur

Publié : 13 Mai 2021 02:11
par jmhoubre
Bonsoir,

plan B, pas super intelligent, mais qui permet d'afficher dans l'inspecteur.

Code : Tout sélectionner

public enum Operateur { Plus, Moins, Multiplier, Diviser};
Ceci ne fonctionne pas (affiche aussi Plus, Moins, Diviser et Multiplier) :

Code : Tout sélectionner

private string plus = "+";
private string moins = "-";
private string diviser = "/";
private string multiplier = "*";

public enum Operateur1 { plus, moins, diviser, multiplier };
En fait, il ne faut pas un string, mais une constante nommée, en gros, un identifiant.

Re: Enum Operateur

Publié : 13 Mai 2021 09:57
par EmileF
Merci beaucoup pour ta réponse,

J'ai modifier mon script selon tes indications
mais dans l'inspecteur, ce n'est pas le signe qui s'affiche mais le texte.
Pour plus de clarté et par manque de place, je préfèrerai que seul le signe s'affiche car je condense tout sur une seule ligne (ça ce n'est pas un problème)

Re: Enum Operateur

Publié : 13 Mai 2021 11:31
par EmileF
Rebonjour,

Voilà, j'ai trouvé une solution, ce n'est peut-être pas la meilleure mais ça marche

J'utilise un array

Code : Tout sélectionner

   
   //Mes opérateurs 
    string[] operateurs = new string[] { "? ", "+", "-", "*", ":" };
    int index; //l'index de l'opérateur courant

   //pour régler la largeur de mes boutons
    private GUILayoutOption miniButtonWidth = GUILayout.Width(30f);


    public override void OnInspectorGUI()
    {
	........
	
	//Je récupère la propriété Operateur de mon script qui est un string 
	SerializedProperty operateur = prop.FindPropertyRelative("Operateur"); 
	
	//Je mets à jour l'index
	index = Array.IndexOf(Operateurs, operateur.stringValue);
        if (index< 0) index = 0;
        
        ......
        
        //et j'affiche le popup pour sélectionner mon opérateur
        index = EditorGUILayout.Popup(index, Operateurs, miniButtonWidth);
        //je mets à jour ma propriété
        operateur.stringValue = Operateurs[index];

	......
	
Voilà la solution que j'ai trouvé et qui fonctionne.
Le seul soucis que j'ai c'est que j'aurai préféré un string vide, au lieu de "?" et "/" au lieu de ":", mais Popup n'affiche pas un string vide et n'affiche pas non plus le trait de fraction. Va savoir pourquoi?
Quelqu'un aura peut-être une idée, Qui sait...

Re: Enum Operateur

Publié : 13 Mai 2021 12:25
par jmhoubre
Tu peux remplacer le ? par Alt-255, qui est un caractère vide.
Pour le ":", je n'ai pas pu tester ton code, qui génère de nombreuses erreurs.