Utiliser une variable string dans le code ?

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
GameTux
Messages : 37
Inscription : 11 Nov 2012 03:13

Utiliser une variable string dans le code ?

Message par GameTux » 19 Mars 2020 05:40

Salut,

Bon cette fois je ne suis pas sûre que ce soit possible mais en gros je voudrais utiliser une variable de type string dans le code comme ça :

Code : Tout sélectionner

GetColorCar = PlayerPrefs.GetString("CarColor");
ColorCar.GetComponent<SelectColor>().GetColorCar();
En fait l'idée est la suivante, GetColorCar contient une variable string par exemple "Blue"

Dans mon script "SelectColor" il y a un "public void Blue()..."

Donc l'idée c'est d'avoir

Code : Tout sélectionner

ColorCar.GetComponent<SelectColor>().Blue();
en écrivant

Code : Tout sélectionner

ColorCar.GetComponent<SelectColor>().GetColorCar();
Si vous voyez ce que je veux dire et si c'est pas trop compliqué.

merci

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Utiliser une variable string dans le code ?

Message par Max » 19 Mars 2020 11:37

Bonjour,

tout cela parait bien compliqué et tarabiscoté...
Pourquoi ne pas simplement mémoriser dans ton PlayerPrefs la valeur de la couleur ?
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

GameTux
Messages : 37
Inscription : 11 Nov 2012 03:13

Re: Utiliser une variable string dans le code ?

Message par GameTux » 19 Mars 2020 17:18

Eh bien en fait le PlayerPrefs contient bien la valeur de la couleur, je crois que tu n’as pas bien compris ce que je veux faire.

L'idée ici c'est d'aller chercher la valeur dans le PlayerPrefs et de l'utilisé dans le code, en gros au lieu de faire ça :

Code : Tout sélectionner

if(GetColorCar == "Blue")
{
ColorCar.GetComponent<SelectColor>().Blue();
}
Je me demandais s’il n’y avait pas une solution pour directement mettre "Blue" dans le code, avec quelque chose du genre :

Code : Tout sélectionner

ColorCar.GetComponent<SelectColor>().FromVariable(GetColorCar);
mais bon je crois que c'est pas possible.
Dernière édition par GameTux le 19 Mars 2020 17:31, édité 4 fois.

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

Re: Utiliser une variable string dans le code ?

Message par boubouk50 » 19 Mars 2020 17:27

Là, tu veux qu'une string soit interprétée comme une fonction. Ca n'arrivera pas.

Par contre, ta donnée pourrait contenir une couleur, ou un index, un clé, etc qui pourrait être interprété par la suite pour déclencher une fonction. Ce que te propose Max.

Si ce n'est pas cela, alors essaie de nous réexpliquer différemment. C'est clair pour toi mais pas forcément pour nous.
"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

GameTux
Messages : 37
Inscription : 11 Nov 2012 03:13

Re: Utiliser une variable string dans le code ?

Message par GameTux » 19 Mars 2020 17:47

Héhé ! J'ai trouvé comment faire ! https://docs.unity3d.com/ScriptReferenc ... nvoke.html

Code : Tout sélectionner

GetColorCar = PlayerPrefs.GetString("CarColor");
ColorCar.GetComponent<SelectColor>().Invoke(GetColorCar, 0f);

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Utiliser une variable string dans le code ?

Message par Max » 19 Mars 2020 17:53

GameTux a écrit :
19 Mars 2020 17:47
Héhé ! J'ai trouvé comment faire ! https://docs.unity3d.com/ScriptReferenc ... nvoke.html

Code : Tout sélectionner

GetColorCar = PlayerPrefs.GetString("CarColor");
ColorCar.GetComponent<SelectColor>().Invoke(GetColorCar, 0f);
Hmm, je ne comprends toujours trop pourquoi ne pas passer par valeur ou index (comme suggéré par Boubouk).
Sinon, Invoke n'est pas du tout prévue pour cela ceci dit (Invokes the method methodName in time seconds.).
Dans ce cas, passe par SendMessage à la limite (même si son utilisation doit rester ponctuelle pour des raisons de performance).
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

GameTux
Messages : 37
Inscription : 11 Nov 2012 03:13

Re: Utiliser une variable string dans le code ?

Message par GameTux » 19 Mars 2020 20:50

Je ne suis pas sûre de comprendre ce que vous voulez dire par "utilisé une valeur ou un index".

Si c'est quelque chose comme ça :

Code : Tout sélectionner

if(GetColorCar == "Blue")
{
ColorCar.GetComponent<SelectColor>().Blue();
}

if(GetColorCar == "Red")
{
ColorCar.GetComponent<SelectColor>().Red();
}

Eh bien c'est simplement plus facile d'utilisé :

Code : Tout sélectionner

GetColorCar = PlayerPrefs.GetString("CarColor");
ColorCar.GetComponent<SelectColor>().Invoke(GetColorCar, 0f);
Sinon en effet "SendMessage" semble encore mieux vue que je n'ai pas besoins de timer.

Et oui ce script n'est pas dans un "update" et il ne semble pas y avoir de problème de performance pour moi.

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Utiliser une variable string dans le code ?

Message par Max » 19 Mars 2020 21:40

Ben si l'objectif est de récuper une couleur pour la voiture mémorisée dans un PlayerPrefs,
tu peux simplement faire quelque chose comme

Code : Tout sélectionner

GetColorCar = PlayerPrefs.GetString("CarColor"); // #00FF00=green #FF0000=red #0000FF=blue
ColorCar.SetColor(GetColorCar);
et dans la méthode ColorCar.SetColor(string cl), tu écrirais par exemple:

Code : Tout sélectionner

...
            Color c;
            ColorUtility.TryParseHtmlString(cl, out c);  
            GetComponent<MeshRenderer>().material.color = c;
...
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

GameTux
Messages : 37
Inscription : 11 Nov 2012 03:13

Re: Utiliser une variable string dans le code ?

Message par GameTux » 20 Mars 2020 17:06

Ok, c'est le premier jeu que je fait et disons que j'apprends sur le tas, j'ai fait différemment et ça semble fonctionné correctement donc je vais laisser comme ça, après c'est sûre que je ne vais pas faire le jeu le mieux optimisé du monde d'ailleurs je crois même que le code de mon jeu est un peu dégueulasse.

Répondre

Revenir vers « Scripting »