[RESOLU] Switch entre deux images

Questions à propos du GUI, y compris la partie script.
Laurentmod
Messages : 6
Inscription : 11 Mars 2017 12:56

[RESOLU] Switch entre deux images

Message par Laurentmod » 12 Avr 2017 09:58

Bonjour à tous,

Je me lance dans Unity et en voulant créer un projet simple je me heurte à une difficulté au niveau de mon script.

Mon objectif : Je possède dans mon projet un bouton appelé "P1" qui est de couleur verte au début. Lors d'un clic sur celui-ci il doit passer au rouge.

Informations :
- J'utilise 2 images au format png appelés "Rectangle vert" et "Rectangle rouge".
- Ces images sont assignés à l'objet P1 dans l'inspecteur d'Unity.

Problème : L'image switch bien du vert (image 1) au rouge (Image2) lors du premier clic mais au second clic l'image reste rouge. Seule la condition 1 est exécutée.

J'ai essayé plusieurs manip pour récupérer l'image source mais cela ne change pas l'issu du problème :
- ImageSource = P1.GetComponent<Image>();
- ImageSource = GameObject.Find("P1").GetComponent<Image>();

J'ai besoin d'une aide car là je suis malheureusement bloquée :-|

Merci à vous.

Ci-dessous le code utilisé :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScriptActivation : MonoBehaviour
{

// Declaration de mes variables
    public GameObject P1;
    public Sprite Image1;
    public Sprite Image2;
    Image ImageSource;

    private void Start()
    {
        Debug.Log("Image 1: "+Image1); // renvoi bien l'image Rectangle vert
        Debug.Log("Image 2: "+Image2); // renvoi bien l'image Rectangle rouge
    }


    public void ChangementImage()

    
    {

        ImageSource = P1.GetComponent<Image>(); // Récupere l'image source de l'objet "P1" ?

        // regarde si l'image source de l'object est le rectangle vert ou rouge et fait un switch
        if (ImageSource.sprite = Image1)
        {
            ImageSource.sprite = Image2;
            Debug.Log("Condition 1");
        }

        else
        {
            ImageSource.sprite = Image1;
            Debug.Log("Condition 2");
        }

    }

}
Image

Merci :amen:
Dernière édition par Laurentmod le 12 Avr 2017 10:18, édité 3 fois.

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

Re: [DB-AL] Switch entre deux images

Message par boubouk50 » 12 Avr 2017 10:03

Salut,

Une erreur que tout débutant fait (et aussi les plus aguerris un lendemain d'apéro chargé): L'affectation et la comparaison.

Code : Tout sélectionner

if (ImageSource.sprite = Image1)
Ceci n'est pas une comparaison mais une affectation. Tu ne prends pas en condition si les images sont les mêmes, mais tu dis au programme de mettre l'image1 dans le sprite de ton imageSource.

Code : Tout sélectionner

if (ImageSource.sprite == Image1)
Ceci est une comparaison.
"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

Laurentmod
Messages : 6
Inscription : 11 Mars 2017 12:56

Re: [DB-AL] Switch entre deux images

Message par Laurentmod » 12 Avr 2017 10:06

:mdr3: Ah oui !!!

Merci beaucoup boubouk50 ! J'ai lu et relu mon code et cela ne m'a jamais sauté aux yeux ! 8|

Merci pour ta réponse rapide !

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

Re: [DB-AL] Switch entre deux images

Message par boubouk50 » 12 Avr 2017 10:17

D'autres petits conseils:
- GetComponent () est lourd, le minimiser au maximum
- un switch est juste 2 états, tu peux utiliser un booléen ou un entier (comme exemple ci-dessous) pour gérer les sprites plutôt que de les comparer entre eux.
- Pas la peine d'avoir et P1 et ImageSource, l'info est redondante puisque l'un va prendre une valeur de l'autre.

Voici un exemple de ce que pourrais être ton code:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScriptActivation : MonoBehaviour
{
	// Declaration de mes variables
	public Sprite[] Images; 		//tableau d'Images
	public Image ImageSource;	//Ici mettre le sprite de ton gameObject P1
    
	private int counter = 0;		//compteur initialisé à 0 pour signifier que Images[0] est en cours

	public void ChangementImage()    
	{
		counter = Mathf.Abs (counter-1); 	//incrémentation du compteur: si 0 alors 1, si 1 alors 0
		ImageSource.sprite = Images [counter];	//affectation du sprite du tableau
	}
}
"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

Laurentmod
Messages : 6
Inscription : 11 Mars 2017 12:56

Re: [RESOLU] Switch entre deux images

Message par Laurentmod » 12 Avr 2017 10:19

Merci boubouk50 pour ces précieux conseils. Je m'y penche dessus tout de suite ! Super et encore merci pour ton aide !! :super:

Laurentmod
Messages : 6
Inscription : 11 Mars 2017 12:56

Re: [DB-AL] Switch entre deux images

Message par Laurentmod » 12 Avr 2017 10:41

Voici un exemple de ce que pourrais être ton code:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScriptActivation : MonoBehaviour
{
	// Declaration de mes variables
	public Sprite[] Images; 		//tableau d'Images
	public Image ImageSource;	//Ici mettre le sprite de ton gameObject P1
    
	private int counter = 0;		//compteur initialisé à 0 pour signifier que Images[0] est en cours

	public void ChangementImage()    
	{
		counter = Mathf.Abs (counter-1); 	//incrémentation du compteur: si 0 alors 1, si 1 alors 0
		ImageSource.sprite = Images [counter];	//affectation du sprite du tableau
	}
}
Boubouk50, j'essaye de comprendre une chose avec le code que tu m'a fourni. A quel moment on déclare les 2 images (rectangle vert et rouge) ?
Que l'image 0 est le rectangle vert et l'image 1 est le rectangle rouge.

Merci. :roll:

Laurentmod
Messages : 6
Inscription : 11 Mars 2017 12:56

Re: [DB-AL] Switch entre deux images

Message par Laurentmod » 12 Avr 2017 10:45

Laurentmod a écrit :
Voici un exemple de ce que pourrais être ton code:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScriptActivation : MonoBehaviour
{
	// Declaration de mes variables
	public Sprite[] Images; 		//tableau d'Images
	public Image ImageSource;	//Ici mettre le sprite de ton gameObject P1
    
	private int counter = 0;		//compteur initialisé à 0 pour signifier que Images[0] est en cours

	public void ChangementImage()    
	{
		counter = Mathf.Abs (counter-1); 	//incrémentation du compteur: si 0 alors 1, si 1 alors 0
		ImageSource.sprite = Images [counter];	//affectation du sprite du tableau
	}
}
Boubouk50, j'essaye de comprendre une chose avec le code que tu m'a fourni. A quel moment on déclare les 2 images (rectangle vert et rouge) ?
Que l'image 0 est le rectangle vert et l'image 1 est le rectangle rouge.

Merci. :roll:

C'est good je vient de comprendre ! Merciiiii !

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

Re: [RESOLU] Switch entre deux images

Message par boubouk50 » 12 Avr 2017 11:06

Une variable déclarée publique sera visible dans l'Inspector donc tu rentres les données dans l'éditeur. Tu peux également le faire avec des variables privées en ajoutant le champs [SerializeField] devant et ainsi réduire le champ d'action (scope) de celles-ci.

Egalement, au cas où tu ne le saches pas, tu peux sans passer par ton script, switcher entre 2 images directement dans la propriété transition du bouton -> SpriteSwap
"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

Laurentmod
Messages : 6
Inscription : 11 Mars 2017 12:56

Re: [RESOLU] Switch entre deux images

Message par Laurentmod » 14 Avr 2017 08:19

Waou merci pour ces super conseils !!! :]

Répondre

Revenir vers « L'interface GUI »