[RESOLU] [DB-AL] Sauvegarde de gameobjects avec playerprefs
Publié : 05 Sep 2017 10:41
Bonjour à tous !
Avant toute chose je tiens à m'excuser si je ne m'exprime pas correctement ou si je me suis trompée dans la description du sujet.
C'est la première fois que je poste sur un forum alors j'étais un peu perdue en arrivant ^^" J'espère avoir mis mon topic au bon endroit....
J'ai vraiment besoin de l'aide de quelqu'un c'est pourquoi je viens ici.
J'ajoute aussi que je suis en stage et que je dois trouver une solution pour terminer le projet malgré mon niveau en C# donc soyez pas trop méchant avec moi svp si je cherche à faire des choses trop difficiles pour moi ^^
Alors voilà, je suis en train de coder en C# une application 2D pour Androïd, c'est une appli de géocaching. Mon soucis est dû au reset d'unity lorsque l'on passe d'une scène à une autre.
J'ai une scène qui me décrit un parcours de geocaching et dedans il y a un bouton que l'on peut activer ou désactiver si l'on a trouvé ou non la cache.
Si le bouton est activé j'aimerais qu'il le reste à chaque fois que l'on revient sur cette scène.
J'ai réussi grâce à cette suite de tutos (https://www.youtube.com/watch?v=iFQjPdqEFj4) à utiliser PlayerPrefs et à recharger mes éléments lorsque l'on clique sur un bouton.
Avec ApplicationOnQuit() j'arrive à garder le bouton actif si on quitte l'application et qu'on revient sur cette scène mais dès que l'on passe sur une autre scène et que l'on revient il ne tient pas...
Mes codes pour sauvegarder mes gameObjects sont les mêmes que celui du tuto, les seules différences sont :
- je n'ai que deux objets,
-je n'ai pas enregistré les éléments en fonction de la scène comme il a fait car c'est la seule scène à avoir des objets à conserver donc je ne pensais pas avoir besoin de le spécifier à unity
Voilà désolée pour ce pavé ^^"
J'espère que quelqu'un pourra m'aider :s
Merci d'avance !!
Voici mes codes :
savGameManager
specificObject
saveableObject
Avant toute chose je tiens à m'excuser si je ne m'exprime pas correctement ou si je me suis trompée dans la description du sujet.
C'est la première fois que je poste sur un forum alors j'étais un peu perdue en arrivant ^^" J'espère avoir mis mon topic au bon endroit....
J'ai vraiment besoin de l'aide de quelqu'un c'est pourquoi je viens ici.
J'ajoute aussi que je suis en stage et que je dois trouver une solution pour terminer le projet malgré mon niveau en C# donc soyez pas trop méchant avec moi svp si je cherche à faire des choses trop difficiles pour moi ^^
Alors voilà, je suis en train de coder en C# une application 2D pour Androïd, c'est une appli de géocaching. Mon soucis est dû au reset d'unity lorsque l'on passe d'une scène à une autre.
J'ai une scène qui me décrit un parcours de geocaching et dedans il y a un bouton que l'on peut activer ou désactiver si l'on a trouvé ou non la cache.
Si le bouton est activé j'aimerais qu'il le reste à chaque fois que l'on revient sur cette scène.
J'ai réussi grâce à cette suite de tutos (https://www.youtube.com/watch?v=iFQjPdqEFj4) à utiliser PlayerPrefs et à recharger mes éléments lorsque l'on clique sur un bouton.
Avec ApplicationOnQuit() j'arrive à garder le bouton actif si on quitte l'application et qu'on revient sur cette scène mais dès que l'on passe sur une autre scène et que l'on revient il ne tient pas...
Mes codes pour sauvegarder mes gameObjects sont les mêmes que celui du tuto, les seules différences sont :
- je n'ai que deux objets,
-je n'ai pas enregistré les éléments en fonction de la scène comme il a fait car c'est la seule scène à avoir des objets à conserver donc je ne pensais pas avoir besoin de le spécifier à unity
Voilà désolée pour ce pavé ^^"
J'espère que quelqu'un pourra m'aider :s
Merci d'avance !!
Voici mes codes :
savGameManager
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class savGameManager : MonoBehaviour
{
private static savGameManager instance;
public List<saveableObject> SaveableObjects {get; private set;}
public static savGameManager Instance
{
get
{
if (instance == null)
{
instance = GameObject.FindObjectOfType<savGameManager>();
}
return instance;
}
}
// Use this for initialization
void Awake ()
{
SaveableObjects = new List<saveableObject>();
Load();
}
public void Save()
{
PlayerPrefs.SetInt("ObjectCount", SaveableObjects.Count);
for (int i = 0; i < SaveableObjects.Count; i++)
{
SaveableObjects[i].Save(i);
}
}
public void Load ()
{
foreach (saveableObject obj in SaveableObjects)
{
if(obj!= null)
{
Destroy(obj.gameObject);
}
}
SaveableObjects.Clear();
int objectCount = PlayerPrefs.GetInt("ObjectCount");
for (int i = 0; i < objectCount; i++)
{
string[] value = PlayerPrefs.GetString(i.ToString()).Split('_');
Debug.Log(value);
//tmp = temporary
GameObject tmp = null;
switch (value[0])
{
case "trouvee":
tmp = Instantiate(Resources.Load("trouvee") as GameObject);
break;
case "trouveeText":
tmp = Instantiate(Resources.Load("trouveeText") as GameObject);
break;
}
if (tmp != null)
{
tmp.GetComponent<saveableObject>().Load(value);
}
}
}
public Vector3 StringToVector (string value)
{ //(1, 23, 3)
value = value.Trim(new char[] {'(',')' });
//1, 23, 3
value = value.Replace(" ", "");
//1,23,3
string[] pos = value.Split(',');
//[0] = 1 [1] = 23 [2] = 3
return new Vector3(float.Parse(pos[0]), float.Parse(pos[1]), float.Parse(pos[2]));
}
public Quaternion StringToQuaternion(string value)
{
return Quaternion.identity;
}
void OnApplicationQuit()
{
PlayerPrefs.SetInt("ObjectCount", SaveableObjects.Count);
}
}
specificObject
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class specificObject : saveableObject
{
private float speed;
private float strength;
// Update is called once per frame
void Update()
{
}
public override void Save(int id)
{
base.Save(id);
}
public override void Load(string[] values)
{
base.Load(values);
}
}
saveableObject
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
enum ObjectType { trouvee, trouveeText }
public abstract class saveableObject : MonoBehaviour
{
protected string save;
[SerializeField]
private ObjectType objectType;
// Use this for initializationz
private void Start ()
{
savGameManager.Instance.SaveableObjects.Add(this);
}
//prend en charge toutes les sauvegardes generales (ex: position, rotation...)
public virtual void Save(int id)
{
PlayerPrefs.SetString(id.ToString(), objectType + "_" + transform.position.ToString());
}
public virtual void Load(string[] values)
{
transform.localPosition = savGameManager.Instance.StringToVector(values[1]);
}
public void DestroySaveable()
{
savGameManager.Instance.SaveableObjects.Remove(this);
Destroy(gameObject);
}
}