Poblème sauvegarde

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: Poblème sauvegarde

Message par Max » 19 Jan 2020 15:44

Salut,

Là avec les éléments disponibles, on ne peut pas vraiment en dire plus.
Tu as une methode (Save) dans ton script saveScript.cs qui est liée à ton onClick de ton bouton du menu.
Maintenant si le Save() se déclenche au lancement de la scène, ben il te faut en trouver l'origine.
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

wolf03
Messages : 19
Inscription : 16 Jan 2020 17:02

Re: Poblème sauvegarde

Message par wolf03 » 19 Jan 2020 16:12

Yes je me doute bien mais j’ai regarder encore et encore ce matin impossible de trouver l’origine du problème 😓

Avatar de l’utilisateur
Aelhan
Messages : 124
Inscription : 11 Déc 2019 23:00

Re: Poblème sauvegarde

Message par Aelhan » 19 Jan 2020 16:17

Salut, a part trouver quel objet/script/événement déclenche la méthode save() c'est pas simple. Ton savescript est probablement attaché à un objet et quelque chose déclenche. A moins que le Debug.Log ne soit pas au bon endroit et ne reflète 0as la réalité de ce qu'il se passe ?! Tu peux nous mettre le code modifié stp ?
En fait ce n'est peut-être pas ta récupération de données qui foire du coup, mais s'il sauvegarde effectivement des le lancement avant de charger, en fait il te charge du vent donc forcement pas ce que tu veux...
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

wolf03
Messages : 19
Inscription : 16 Jan 2020 17:02

Re: Poblème sauvegarde

Message par wolf03 » 19 Jan 2020 16:36

bien les seules choses rattaché à script c'est mon player c'est bien ça le problème et mon script modifier est :

Code : Tout sélectionner

public class saveScript : MonoBehaviour
{
    public GameObject player;
    public GameObject panelMenu;
    bool affiche = false;

    void Start()
    {
        

        panelMenu.SetActive(false);

        if(PlayerPrefs.GetInt("load")==1)
        {
            // si load
            float x = PlayerPrefs.GetFloat("x");
            float y = PlayerPrefs.GetFloat("y");
            float z = PlayerPrefs.GetFloat("z");
            player.transform.position = new Vector3(x,y,z);
        }

        
    }

   
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            affiche = !affiche;

            panelMenu.SetActive(affiche);

        }

        if (affiche)
        {
            Time.timeScale = 0;
        }

        else
        {

            Time.timeScale = 1;

        }
      
    }
    
    public void Save()
    {
        Debug.Log("Appel Save");
        PlayerPrefs.SetString("scene", SceneManager.GetActiveScene().name);
        PlayerPrefs.SetFloat("x", player.transform.position.x);
        PlayerPrefs.SetFloat("y", player.transform.position.y);
        PlayerPrefs.SetFloat("z", player.transform.position.z);
    }

    public void Continue()
    {

        affiche = !affiche;

        panelMenu.SetActive(affiche);

        if (affiche)
        {
            Time.timeScale = 0;
        }

        else
        {

            Time.timeScale = 1;

        }

    }
            
}

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: Poblème sauvegarde

Message par EmileF » 19 Jan 2020 17:39

Salut,

Une petite question: C'est quoi cette condition pour lire tes données

Code : Tout sélectionner

if(PlayerPrefs.GetInt("load")==1)
dans ton code save il n'y a pas de int sauvegardé, tu devrais commenter cette ligne de condition dans ton script, je pense que c'est elle qui gène
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

wolf03
Messages : 19
Inscription : 16 Jan 2020 17:02

Re: Poblème sauvegarde

Message par wolf03 » 19 Jan 2020 17:47

EmileF a écrit :
19 Jan 2020 17:39
Salut,

Une petite question: C'est quoi cette condition pour lire tes données

Code : Tout sélectionner

if(PlayerPrefs.GetInt("load")==1)
dans ton code save il n'y a pas de int sauvegardé, tu devrais commenter cette ligne de condition dans ton script, je pense que c'est elle qui gène

Cette condition va avec ce code sur mon script pour mes boutons du menu

Code : Tout sélectionner

 public class uiscript : MonoBehaviour
{
    private void Start()
    {
        PlayerPrefs.SetInt("load", 0);
    }

    public void PlayGame()
    {

        SceneManager.LoadScene("scenes 1");
        
    }

    public void ExitGame()
    {

        Application.Quit();

    }

    public void LoadGame()
    {
        
        if(PlayerPrefs.HasKey("x"))
        {
            PlayerPrefs.SetInt("load", 1);
            SceneManager.LoadScene(PlayerPrefs.GetString("niveau"));
        }
    }
}
Et donc permet de charger mes nouvelles données quand load est sur true et non false

Avatar de l’utilisateur
Aelhan
Messages : 124
Inscription : 11 Déc 2019 23:00

Re: Poblème sauvegarde

Message par Aelhan » 19 Jan 2020 18:21

Et si cette condition tu la mettais plutôt dans ton start ? En gros :

Code : Tout sélectionner

private void Start()
     if(PlayerPrefs.HasKey("x"))
        {
            PlayerPrefs.SetInt("load", 1);
        }else
    {
        PlayerPrefs.SetInt("load", 0);
    }
    
Par contre je trouve que tu es vraiment beaucoup à jouer avec les playersprefs, ce ne serait pas plus sûr et plus stable avec des variables toutes simples dans certains cas ? J'ai l'impression que tu les utilises parfois pour faire un raccourci pour utiliser une variable d'un autre script.
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: Poblème sauvegarde

Message par EmileF » 19 Jan 2020 18:23

As-tu fait un essai avec cette ligne commentée ?

Dans ton Start tu as

Code : Tout sélectionner

PlayerPrefs.SetInt("load", 0);
qui , à mon avis vient contredire le:

Code : Tout sélectionner

            PlayerPrefs.SetInt("load", 1);
            SceneManager.LoadScene(PlayerPrefs.GetString("niveau"));
 
car tu as loadScene ensuite qui peut appeler ce Start avant le Start de la classe saveScript
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

wolf03
Messages : 19
Inscription : 16 Jan 2020 17:02

Re: Poblème sauvegarde

Message par wolf03 » 19 Jan 2020 18:56

Aelhan a écrit :
19 Jan 2020 18:21
Et si cette condition tu la mettais plutôt dans ton start ? En gros :

Code : Tout sélectionner

private void Start()
     if(PlayerPrefs.HasKey("x"))
        {
            PlayerPrefs.SetInt("load", 1);
        }else
    {
        PlayerPrefs.SetInt("load", 0);
    }
    
Par contre je trouve que tu es vraiment beaucoup à jouer avec les playersprefs, ce ne serait pas plus sûr et plus stable avec des variables toutes simples dans certains cas ? J'ai l'impression que tu les utilises parfois pour faire un raccourci pour utiliser une variable d'un autre script.

Oui je vais essayer avec ça pour voir, merci.
Ensuite oui j’utilise beaucoup mes playerprefs mais c’est un des seule truc que je connais réellement, comme dis cela fais à peine deux semaines que j’apprends la programmation donc je ne connais pas encore tout 😅

wolf03
Messages : 19
Inscription : 16 Jan 2020 17:02

Re: Poblème sauvegarde

Message par wolf03 » 19 Jan 2020 19:01

EmileF a écrit :
19 Jan 2020 18:23
As-tu fait un essai avec cette ligne commentée ?

Dans ton Start tu as

Code : Tout sélectionner

PlayerPrefs.SetInt("load", 0);
qui , à mon avis vient contredire le:

Code : Tout sélectionner

            PlayerPrefs.SetInt("load", 1);
            SceneManager.LoadScene(PlayerPrefs.GetString("niveau"));
 
car tu as loadScene ensuite qui peut appeler ce Start avant le Start de la classe saveScript
Sans doute après je vais essayer comme a dit Aelhan peut être cela fonctionnera t’il .

Répondre

Revenir vers « Scripting »