Page 1 sur 1

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

Publié : 10 Juin 2023 13:22
par Camsko95
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.

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

Publié : 11 Juin 2023 00:30
par jmhoubre
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.

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

Publié : 11 Juin 2023 12:37
par Camsko95
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.