[Résolu] Toggle.isOn = false ?

Questions à propos du GUI, y compris la partie script.
Julianx2
Messages : 213
Inscription : 25 Sep 2013 22:23
Localisation : Paris

[Résolu] Toggle.isOn = false ?

Message par Julianx2 » 15 Mai 2017 20:00

Salut,

Je viens quérir votre aide car je suis en train de devenir fou avec les Toggle. Je m'en sert pour gérer les options de son et quoi que je fasse, le Toggle se remet sur "ON" d'une scène à une autre, malgré des sauvegardes avec un Set int.

J'ai trouvé sur le net ceci : toogle.isOn / Cela ne fonctionne pas comme je l’espérais "toogle.isOn = false;" (une erreur apparaît.) Ma question est donc la suivante : Comment faire que le toggle "isOn" soit détecté ?

Merci à vous!

Voici un exemple pour illustrer mes propos :

Code : Tout sélectionner

    void Start()
    {

        PlayerPrefs.GetInt("music");
        
	// Est-ce ici que je devrais indiquer "isOn = true/false" avec une condition ?
	
    }

    public void MuteToggle()
    {

        isMute = !isMute;



        if (isMute == true)
        {
            AudioListener.volume = 0;
            PlayerPrefs.SetInt("music", 0);
            //toogle.isOn = false;
           
        }
        else
        {
            AudioListener.volume = 1;
            PlayerPrefs.SetInt("music", 1);
            //toogle.isOn = true;
        }
    }
}

Dernière édition par Julianx2 le 16 Mai 2017 13:43, édité 2 fois.
Quizy - Culture Générale & Quiz - https://play.google.com/store/apps/deta ... XON.Quizy2

Nazarick
Messages : 60
Inscription : 03 Avr 2017 21:44

Re: [DB] Toggle.isOn = false ?

Message par Nazarick » 16 Mai 2017 00:20

une erreur apparaît.
Dans la console ? Laquelle ?

Je n'utilise pas de toggle dans mes UI mais j'ai essayé rapidement et Toggle.isOn retourne correctement son état au moment demandé.

Code : Tout sélectionner

        public Toggle myToggle;
        private int volumeMusic;

        private void ViveLesGoonies()
        {
            // Tu récupères la valeur via PlayerPrefs
            volumeMusic = PlayerPrefs.GetInt("KeyRef");

            // Un coup de ternaire pour aller plus vite.
            myToggle.isOn = (volumeMusic == 1) ? false : true;
        }
Si tu ne connaissais pas les ternaires, la ligne qui retourne "True ou False" revient au même que si tu faisais cela :

Code : Tout sélectionner

            if(volumeMusic == 1)
            {
                myToggle.isOn = false;
            }
            else
            {
                myToggle.isOn = true;
            }
Si ce n'est pas ça, alors donne plus d'informations. Surtout vis-à-vis de l'erreur que tu rencontres.

Julianx2
Messages : 213
Inscription : 25 Sep 2013 22:23
Localisation : Paris

Re: [DB] Toggle.isOn = false ?

Message par Julianx2 » 16 Mai 2017 11:27

Merci pour ta réponse,

J'ai essayé mais je n'arrive pas à récupérer le IsOn, il fini s'affiche toujours en ON... néanmoins ta solution ne fait pas d'erreurs !

J'ai préféré mettre un slider finalement :lol:

Code : Tout sélectionner

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

public class GameMusicToggle : MonoBehaviour
{

    public Slider mySlider;


    void Start()
    {
        
        mySlider.value = PlayerPrefs.GetFloat("CurVol", AudioListener.volume); ;

    }

    public void MuteToggle()
    {

        AudioListener.volume = mySlider.value;
        PlayerPrefs.SetFloat("CurVol", AudioListener.volume);
        PlayerPrefs.Save();
    }
}
Quizy - Culture Générale & Quiz - https://play.google.com/store/apps/deta ... XON.Quizy2

Nazarick
Messages : 60
Inscription : 03 Avr 2017 21:44

Re: [DB] Toggle.isOn = false ?

Message par Nazarick » 16 Mai 2017 12:38

Julianx2 a écrit :Merci pour ta réponse,

J'ai essayé mais je n'arrive pas à récupérer le IsOn, il fini s'affiche toujours en ON... néanmoins ta solution ne fait pas d'erreurs !

J'ai préféré mettre un slider finalement :lol:
A part peut-être si tu as spécifié sur ton Inspector (à la variable toggle) non pas le "toggle" de la hiérarchie que tu cherches à modifier, mais celui d'un prefab ce qui pourrait expliquer le problème. (Ou simplement un autre toggle).

Note à part : Si tu utilises un slider, change au moins les noms des méthodes, et même de la classe, avec des noms si éloignés de leurs fonctions, tu va te perdre dans tes scripts.

Julianx2
Messages : 213
Inscription : 25 Sep 2013 22:23
Localisation : Paris

Re: [DB] Toggle.isOn = false ?

Message par Julianx2 » 16 Mai 2017 12:56

Oui, je vais en avoir besoin de toute façon pour gérer les sons des menus indépendamment des musiques du jeu donc je vais m'y atteler :)

EDIT : j'ai finalement trouvé ! :ghee:

Code : Tout sélectionner

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GameMusicToggle : MonoBehaviour
{

    public Toggle myToggle;
    private int volumeMusic;
    public bool soundToggle;
    public int blabla;



    void Start()
    {
        blabla = PlayerPrefs.GetInt("KeyRef");
        Debug.Log(blabla);

        if (blabla == 1)
        {
            GetComponent<Toggle>().isOn = true;
        }
        else
        {
            GetComponent<Toggle>().isOn = false;
        }

      

    }

    public void OnOff()
    {
        soundToggle = !soundToggle;
        if (soundToggle)
        {
            AudioListener.volume = 0;
            PlayerPrefs.SetInt("KeyRef", 0);
            PlayerPrefs.Save();
          
            Debug.Log("off");
        }
        else
        {
            AudioListener.volume = 1;
            PlayerPrefs.SetInt("KeyRef", 1);
            PlayerPrefs.Save();
           
            Debug.Log("on");
        }  
    }
}
Merci pour ton aide!
Quizy - Culture Générale & Quiz - https://play.google.com/store/apps/deta ... XON.Quizy2

Julianx2
Messages : 213
Inscription : 25 Sep 2013 22:23
Localisation : Paris

Re: [Résolu] Toggle.isOn = false ?

Message par Julianx2 » 16 Mai 2017 13:54

Une dernière chose,

Comment activer la musique si le joueur reset les pref ? J'ai essayé cela :

Code : Tout sélectionner

void Start()
    {
        if (PlayerPrefs.HasKey("KeyRef") == false)
        {
            Debug.Log("NoKey");
           
            GetComponent<Toggle>().isOn = true;

        }
         

            blabla = PlayerPrefs.GetInt("KeyRef");
            Debug.Log(blabla);

        

        if (blabla == 1)
        {
            GetComponent<Toggle>().isOn = true;
        }
        else
        {
            GetComponent<Toggle>().isOn = false;
        }

      

    }
Quizy - Culture Générale & Quiz - https://play.google.com/store/apps/deta ... XON.Quizy2

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

Re: [Résolu] Toggle.isOn = false ?

Message par boubouk50 » 16 Mai 2017 14:26

Et ça ne marche pas?
Le code a l'air juste.

Je te mets un code un peu plus judicieux et optimisé, pour que tu aies un exemple.

Code : Tout sélectionner

void Start()
{
	//initialiser blabla à 0 (false) pour éviter qu'elle n'existe pas avant de l'utiliser
	blabla = 0; 
	
	//Utiliser le else pour récupérer la KeyRef seulement si elle existe
	if (!PlayerPrefs.HasKey("KeyRef")) //Utiliser le ! pour éviter de faire une comparaison avec false et utiliser directement le résultat, cela évite une comparaison inutile.
	{
		Debug.Log("NoKey");
		//Cela ne sert à rien de mettre le toggle à true puisque la suite le changera aussi en fonction de blabla, autant favoriser la condition finale
		blabla = 1;
        }
	else {
		blabla = PlayerPrefs.GetInt("KeyRef");
		Debug.Log(blabla);
	}

	//Le résultat de la condition EST le résultat du toggle, on peut donc mettre la condition directement en résultat et économiser une condition et une instruction
	GetComponent<Toggle>().isOn = (blabla == 1);
}
"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

Julianx2
Messages : 213
Inscription : 25 Sep 2013 22:23
Localisation : Paris

Re: [Résolu] Toggle.isOn = false ?

Message par Julianx2 » 16 Mai 2017 16:18

Non ça ne fonctionnait pas mais j'avoue que à force de tout changer j'ai surement du faire des erreurs.

Merci pour le code boubouk, c'est plus optimisé en effet! :super:
Quizy - Culture Générale & Quiz - https://play.google.com/store/apps/deta ... XON.Quizy2

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

Re: [Résolu] Toggle.isOn = false ?

Message par boubouk50 » 16 Mai 2017 16:33

Comment testes-tu? Vas-tu dans la base de registre supprimer les clés?
"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

Julianx2
Messages : 213
Inscription : 25 Sep 2013 22:23
Localisation : Paris

Re: [Résolu] Toggle.isOn = false ?

Message par Julianx2 » 17 Mai 2017 10:08

Pour les playerprefs ? J'ai créé un bouton test "Reset PlayerPrefs", je ne supprime que d'ici.
Quizy - Culture Générale & Quiz - https://play.google.com/store/apps/deta ... XON.Quizy2

Répondre

Revenir vers « L'interface GUI »