[DB - AL] Changer donnée dans On_Click image.sprite

Questions à propos du GUI, y compris la partie script.
Teutch
Messages : 35
Inscription : 17 Nov 2014 22:58

[DB - AL] Changer donnée dans On_Click image.sprite

Message par Teutch » 15 Avr 2017 10:53

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.
Image

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.

Avatar de l’utilisateur
NDrew
Messages : 581
Inscription : 25 Oct 2013 15:14
Localisation : Clermont-Ferrand

Re: [DB - AL] Changer donnée dans On_Click image.sprite

Message par NDrew » 15 Avr 2017 15:52

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); });

Teutch
Messages : 35
Inscription : 17 Nov 2014 22:58

Re: [DB - AL] Changer donnée dans On_Click image.sprite

Message par Teutch » 16 Avr 2017 23:19

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 :pleur4: ).

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;
	}
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.
8/

Je ne sais pas si c'est plus clair.


Merci d'avance,
Teutch.

Teutch
Messages : 35
Inscription : 17 Nov 2014 22:58

Re: [DB - AL] Changer donnée dans On_Click image.sprite

Message par Teutch » 25 Avr 2017 23:22

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... :pleur4:

S'il vous plait, je suis débutant, et j'en peux plus de me coucher à 1h du mat pour rien. :snif:
:rouge:

Merci,
Teutch.

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

Re: [DB - AL] Changer donnée dans On_Click image.sprite

Message par boubouk50 » 26 Avr 2017 09:26

Tu changes le sprite du Component Image, non? Il te faut alors utiliser:

Code : Tout sélectionner

GetComponent <Image> ().sprite = monSprite;
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.
"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

Teutch
Messages : 35
Inscription : 17 Nov 2014 22:58

Re: [DB - AL] Changer donnée dans On_Click image.sprite

Message par Teutch » 27 Avr 2017 23:53

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 ! :cote:

C'est po gagné dans ma tête. :gene:


Merci encore.

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

Re: [DB - AL] Changer donnée dans On_Click image.sprite

Message par boubouk50 » 28 Avr 2017 16:01

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.
"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

Teutch
Messages : 35
Inscription : 17 Nov 2014 22:58

Re: [DB - AL] Changer donnée dans On_Click image.sprite

Message par Teutch » 30 Avr 2017 22:42

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. :rouge:

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. :cote:

Merci encore...

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

Re: [DB - AL] Changer donnée dans On_Click image.sprite

Message par boubouk50 » 02 Mai 2017 09:31

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. :cote:
Bonne initiative! :super:
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

Répondre

Revenir vers « L'interface GUI »