[RESOLU] Charger des données de type float[] avec PlayerPrefs.

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Camsko95
Messages : 4
Inscription : 29 Avr 2023 21:11

[RESOLU] Charger des données de type float[] avec PlayerPrefs.

Message par Camsko95 » 10 Juin 2023 13:22

bonjour bonjour. étant un débutant sur unity, je viens de découvrir il y a quelques jours, les PlayerPrefs.

je crée en ce moment un jeu 2d (un peu un zelda-like). quand je vais dans une maison ou grotte, je change de scène et
quand je reviens dans ma scène de base, je reprends tout depuis le début(normal)

ce que je veux, c'est sauvegarder la position x et y du joueur avant qu'il change de scène pour ensuite la charger quand il reviens.

alors je crée un script "test" pour voir si tout fonctionne. le but est que quand je rentre en collision avec on va dire n'importe quoi, ça sauvegarde ma position et quand j'appuie sur la touche H, ma position se charge (et donc si j'ai bien compris, ça devrai me téléporter.)
sauf que... rien ne se passe...
je ne sais pas si c'est moi qui a mal utiliser les PlayerPrefs ou si je devrai utiliser une autre méthode de sauvegarde plus adapté à cette situation...

voici le script

Code : Tout sélectionner

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

public class SavePos : MonoBehaviour
{
    public float[] MesPos = new float[2];
    
    public GameObject player;

    void Update()
    {
        MesPos[0] = player.transform.position.x;
        MesPos[1] = player.transform.position.y;  
        
       if(Input.GetKeyDown(KeyCode.H))
        {
            Debug.Log("première étape terminé");
            if(PlayerPrefs.HasKey("PosX") & PlayerPrefs.HasKey("PosY"))
            {
                Debug.Log("Deuxième étape terminé");
                MesPos[0] = PlayerPrefs.GetFloat("PosX");
                MesPos[1] = PlayerPrefs.GetFloat("PosY");
            }
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.CompareTag("Player"))
        {
            SaveAllPos();
        }
    }

    public void SaveAllPos()
    {
        PlayerPrefs.SetFloat("PosX", MesPos[0]); 
        PlayerPrefs.SetFloat("PosY", MesPos[1]);
        PlayerPrefs.Save();
    }
}
j'ai regarder dans mon registre et les deux valeurs sont bien sauvegardés.

comme je vous ai dit, rien ne se passe alors j'ai mis des Debug.Log. les deux sont affichés dans la console.
j'espère que vous avez bien tout compris quel était mon problème.

bonne journée ou soirée.
Dernière édition par Camsko95 le 11 Juin 2023 12:39, édité 1 fois.

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: Charger des données de type float[] avec PlayerPrefs.

Message par jmhoubre » 11 Juin 2023 00:30

Bonsoir,

quand tu tapes H, tu récupères bien MesPos[0] et MesPos[1], mais à aucun moment, tu ne modifies la position de ton joueur.

Petit conseil : tu devrais utiliser un Vector2 plutôt qu'un tableau de float.

Camsko95
Messages : 4
Inscription : 29 Avr 2023 21:11

Re: Charger des données de type float[] avec PlayerPrefs.

Message par Camsko95 » 11 Juin 2023 12:37

merci du conseil mais je ne peux pas sauvegarder des Vector avec des PlayerPrefs, la seul solution (je pense) et d'utiliser un tableau float.


avec ce que tu m'as dis, j'ai rajouté cette ligne de code

Code : Tout sélectionner

player.transform.position = new Vector2(MesPos[0], MesPos[1]);
et en effet, ça marche. Je pensais que le faite de charger MesPos[0] et MesPos[1], ça allait fonctionner mais non.

j'ai mis une bonne vingtaine de minutes avant de comprendre, surtout pour une erreur un peu idiote... preuve que je dois encore apprendre ah ah.
en tout cas, merci de m'avoir répondu et de m'avoir aidé.
salut.

Répondre

Revenir vers « Scripting »