[DB - AL] Changer donnée dans On_Click image.sprite
[DB - AL] Changer donnée dans On_Click image.sprite
Bonjour,
Je souhaiterais pouvoir changer une donnée dans mon script C#, le sprite utilisé lors d'un clic, ce qui est entouré sur la capture ci-dessous.
Je ne trouve pas la fonction. J'ai bien entendu vu ça :
https://docs.unity3d.com/ScriptReferenc ... Click.html
Mais ça ne convient pas pour mon cas d'instanciation, ou alors je n'ai pas su l'utiliser.
En fait, c'est un prefab d'un bouton qui est instancié plusieurs fois (jusque là, c'est bon), et je souhaiterais assigner un sprite différent à chaque instanciation (et là, c'est plus bon). Mes sprites sont sagement en attente dans une List.
Y-a-t-il également un moyen de faire revenir le bouton dans son état de base, après une attente, avec le sprite d'origine avant le clic ?
Merci,
Teutch.
Je souhaiterais pouvoir changer une donnée dans mon script C#, le sprite utilisé lors d'un clic, ce qui est entouré sur la capture ci-dessous.
Je ne trouve pas la fonction. J'ai bien entendu vu ça :
https://docs.unity3d.com/ScriptReferenc ... Click.html
Mais ça ne convient pas pour mon cas d'instanciation, ou alors je n'ai pas su l'utiliser.
En fait, c'est un prefab d'un bouton qui est instancié plusieurs fois (jusque là, c'est bon), et je souhaiterais assigner un sprite différent à chaque instanciation (et là, c'est plus bon). Mes sprites sont sagement en attente dans une List.
Y-a-t-il également un moyen de faire revenir le bouton dans son état de base, après une attente, avec le sprite d'origine avant le clic ?
Merci,
Teutch.
Re: [DB - AL] Changer donnée dans On_Click image.sprite
Si tu es en script tu peux simplement ajouter un "callback" directement en code et la tu peux vraiment faire ce que tu veux :
Code : Tout sélectionner
b.onClick.AddListener(() => { toto.DoSomething(1); });
ou
b.onClick.AddListener(() => { int a = autreInt; toto.DoSomething(a); });
Re: [DB - AL] Changer donnée dans On_Click image.sprite
Déjà, merci pour ta réponse.
Bon, comme je le disais, c'est bien cette fonction que j'avais trouvée. Seulement, pour moi, elle ne me permet pas de dire à mon instance de prefab : "Toi, quand je te crée, tu prends le sprite 1 pour le clic".
En fait, je fais un jeu de memory. J'ai crée une liste avec des sprites pris aléatoirement dans un répertoire. J'ai créé un prefab vignette à partir d'un bouton qui possède de component Onclick qui change le sprite. J'instancie la vignette le nombre de fois dont j'ai besoin selon la difficulté (là, pas de souci), et je souhaite assigner un sprite onClick différent pour chaque instance (là, je pleure ).
Voici le bout de code incriminé.
Or, là, j'ai l'impression qu'il assigne une nouvelle vignette que lors du clic.
En fait, ce que je vois, c'est ma grille de jeu, et dès que je clique sur une des vignettes, la vignette "cliquée" me montre le sprite de base défini sur le prefab, et la dernière vignette se retourne également avec le premier sprite de ma liste.
Je ne sais pas si c'est plus clair.
Merci d'avance,
Teutch.
Bon, comme je le disais, c'est bien cette fonction que j'avais trouvée. Seulement, pour moi, elle ne me permet pas de dire à mon instance de prefab : "Toi, quand je te crée, tu prends le sprite 1 pour le clic".
En fait, je fais un jeu de memory. J'ai crée une liste avec des sprites pris aléatoirement dans un répertoire. J'ai créé un prefab vignette à partir d'un bouton qui possède de component Onclick qui change le sprite. J'instancie la vignette le nombre de fois dont j'ai besoin selon la difficulté (là, pas de souci), et je souhaite assigner un sprite onClick différent pour chaque instance (là, je pleure ).
Voici le bout de code incriminé.
Code : Tout sélectionner
...
for (int i=0 ; i< VarPartagees.elementsChoisis.Count ; i++)
{
// initialise le GameObject myGo avec les instances vign
GameObject maVig = (GameObject)Instantiate (vign, transform.position, Quaternion.identity);
maVig.transform.SetParent(canvas);
monBtn = maVig.GetComponent<Button> ();
monBtn.onClick.AddListener (UpdateVignette);
}
}
void UpdateVignette(){
vignette = VarPartagees.elementsChoisis[v];
monBtn.GetComponent<Image>().sprite = vignette;
}
En fait, ce que je vois, c'est ma grille de jeu, et dès que je clique sur une des vignettes, la vignette "cliquée" me montre le sprite de base défini sur le prefab, et la dernière vignette se retourne également avec le premier sprite de ma liste.
Je ne sais pas si c'est plus clair.
Merci d'avance,
Teutch.
Re: [DB - AL] Changer donnée dans On_Click image.sprite
Bonsoir,
Bon ben désolé, mais ça fait des jours que je cherche et que je ne trouve pas.
Je suis bloqué pour le coup.
La solution semble donc être bouton.onClick.AddListener , mais je dois mal m'y prendre parce que dans mon cas ça ne fonctionne pas.
Je le répète, je souhaite changer, par script, le sprite qui est en donnée du On Click d'un bouton (sur la capture, il s'appelle 0), ce n'est pas au moment du clic que je souhaite le changer - ça j'y arrive - mais avant, pendant l'instanciation du bouton.
Je n'arrive pas à y accéder avec un getComponent...
S'il vous plait, je suis débutant, et j'en peux plus de me coucher à 1h du mat pour rien.
Merci,
Teutch.
Bon ben désolé, mais ça fait des jours que je cherche et que je ne trouve pas.
Je suis bloqué pour le coup.
La solution semble donc être bouton.onClick.AddListener , mais je dois mal m'y prendre parce que dans mon cas ça ne fonctionne pas.
Je le répète, je souhaite changer, par script, le sprite qui est en donnée du On Click d'un bouton (sur la capture, il s'appelle 0), ce n'est pas au moment du clic que je souhaite le changer - ça j'y arrive - mais avant, pendant l'instanciation du bouton.
Je n'arrive pas à y accéder avec un getComponent...
S'il vous plait, je suis débutant, et j'en peux plus de me coucher à 1h du mat pour rien.
Merci,
Teutch.
- boubouk50
- ModoGenereux
- Messages : 6266
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB - AL] Changer donnée dans On_Click image.sprite
Tu changes le sprite du Component Image, non? Il te faut alors utiliser:
En fait si ça marche au clic, alors la fonction que tu mets au clic, mets-la dans ton Start () et ça devrait marcher. Il ne faut pas passer par le bouton.
Code : Tout sélectionner
GetComponent <Image> ().sprite = monSprite;
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [DB - AL] Changer donnée dans On_Click image.sprite
Merci, je n'ai pas eu le temps de regarder de nouveau.
Mais si je comprends bien, j'oublie le "On click" du bouton qui me permettait de changer facilement son image ?
Mais alors, j'ai plus besoin que ce soit un bouton ? Je trouvais ça pratique mouai !
C'est po gagné dans ma tête.
Merci encore.
Mais si je comprends bien, j'oublie le "On click" du bouton qui me permettait de changer facilement son image ?
Mais alors, j'ai plus besoin que ce soit un bouton ? Je trouvais ça pratique mouai !
C'est po gagné dans ma tête.
Merci encore.
- boubouk50
- ModoGenereux
- Messages : 6266
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB - AL] Changer donnée dans On_Click image.sprite
Il y a deux choses ici:
Le Start () qui permet d'initialiser l'image du bouton. Il n'utilise pas la fonction du bouton, c'est inutile puisque tu n'as pas besoin d'un clic. C'est l'initialisation.
Le AddListener () qui va "créer" l'interaction du bouton, donc le clic. Il permet d'assigner programmaticalement une ou plusieurs fonctions à ton bouton. C'est l'interaction.
Ici, les deux font la même chose: changer le sprite. Sauf que l'un réagit à un clic, l'autre est lancé à l'instanciation. Il ne faut pas confondre les deux.
De ce que j'ai compris tu as besoin des deux, après c'est à toi de les adapter pour ton code.
Le Start () qui permet d'initialiser l'image du bouton. Il n'utilise pas la fonction du bouton, c'est inutile puisque tu n'as pas besoin d'un clic. C'est l'initialisation.
Le AddListener () qui va "créer" l'interaction du bouton, donc le clic. Il permet d'assigner programmaticalement une ou plusieurs fonctions à ton bouton. C'est l'interaction.
Ici, les deux font la même chose: changer le sprite. Sauf que l'un réagit à un clic, l'autre est lancé à l'instanciation. Il ne faut pas confondre les deux.
De ce que j'ai compris tu as besoin des deux, après c'est à toi de les adapter pour ton 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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [DB - AL] Changer donnée dans On_Click image.sprite
Merci pour les détails, ils m'éclaircissent beaucoup.
En fait, je pense que je vais devoir repenser une partie de mon code, pas à cause des fonctions elles-mêmes, mais parce que j'ai mal pensé le système au départ, et que je ne le vois que maintenant avec mes problèmes... erreur de débutant.
Là, je vais faire une petite pause "élève sérieux", et mettre mon jeu de memory un peu de côté... je viens de recevoir un livre de formation Unity, et je crois qu'il est préférable de m'attaquer à ça avant mes trucs à moi.
Merci encore...
En fait, je pense que je vais devoir repenser une partie de mon code, pas à cause des fonctions elles-mêmes, mais parce que j'ai mal pensé le système au départ, et que je ne le vois que maintenant avec mes problèmes... erreur de débutant.
Là, je vais faire une petite pause "élève sérieux", et mettre mon jeu de memory un peu de côté... je viens de recevoir un livre de formation Unity, et je crois qu'il est préférable de m'attaquer à ça avant mes trucs à moi.
Merci encore...
- boubouk50
- ModoGenereux
- Messages : 6266
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB - AL] Changer donnée dans On_Click image.sprite
Bonne initiative!Teutch a écrit :Là, je vais faire une petite pause "élève sérieux", et mettre mon jeu de memory un peu de côté... je viens de recevoir un livre de formation Unity, et je crois qu'il est préférable de m'attaquer à ça avant mes trucs à moi.
Bon apprentissage.
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation