Buenas a todos,
Quiero preguntaros cual seria la manera de poder guardar el progreso que el jugador lleve desbloqueado, para que cuando vuelva a entrar a juego siga por el mismo nivel.
Os dejo una imagen de lo que me refiero
(//<fileStore.core_Attachment>/monthly_2017_03/1.png.da053e612673d7a7943b9f592a777545.png)
Un proceso basico y totalmente inutil a futuro es usar "playerprefs". Util para guardar strings int o floats, generalmente valores de opciones de menu. Un metodo consistente, que tiene muchos usos y muy usado actualmente en casi cualquier juego y mas dificil (no tanto, solo un poco), serializacion binaria. Fijate en este tutorial oficial de Unity para tener una idea.
https://unity3d.com/es/learn/tutorials/topics/scripting/persistence-saving-and-loading-data (https://unity3d.com/es/learn/tutorials/topics/scripting/persistence-saving-and-loading-data)
Yo uso xml para muchisimas cosas, una de ellas es guardar el progreso de un juego, que aunque digan lo que quieran es la mezcla perfecta entre funcionalidad y facilidad. Incluso en un momento usaba un simple txt, podes guardar "tu" formato y leerlo luego.
Saludos
ok!! gracias
Me pongo manos a la obra jejejje
Yo lo que haria mas que nada para ganar algo en seguridad y que no mani***n los niveles es usar la clase BinaryFormatter(), FileStream y crear una clase serializada ahora mismo no estoy en el ordenador que tiene unity pero un prototipo de codigo podria ser esto:
//No se si las clases estaran bien
using UnityEngine;
using System.IO;
using System;
using System.Runtime.Binary.Formater;
public class GuardarYCargar:MonoBehaviour{
public static int _levels;
void Start(){
//Lo que va entre comillas puede ser lo que quieras tanto el nombre como la extension
string _rutaparaguardar = Application.persistentdatpath + "data1.dat";
}
static void Load(){
if(File.Exists(_rutaparaguardar)){
BinaryFormatter _binary = new BinaryFormatter();
FileStream _file = File.Open(_rutaparaguardar, FileMode.Open);
DatosAGuardar _datos = (DatosAGuardar)_binary.Deserialize(_file);
_levels = _datos._levelStored;
File.Close();
}
}
static void Save(){
BinaryFormatter _binary = new BinaryFormatter();
FileStream _file = File.Create(_rutaparaguardar);
_DatosAGuardar _datos = new DatosAGuardar();
_datos._levelStored = _levels;
_binary.Serialize(_file, _datos);
File.Close();
}
}
[System.Serializable]
public class _DatosAGuardar{
public int _levelStored;
}
Lo que hace principalmente es crear un archivo que contiene los valores en este caso los niveles completados la utilizacion es o crear un script aparte para luego añadirselo al gestor de niveles o insertarlo directamente en el script del gestor de niveles cuando se pase un nivel lo guardas llamando a la funcion Load() y al inicio del script en Start() llamas a la funcion Load() asi mas o menos
//Esto en el selector de niveles
public Button[] _levelButtons;
public Sprite _buttonDisabledSprite;
void Start(){
GuardarYCargar.Load();
for(int i = 1; i < GuardarYCargar._levels; i++){
//Habilitas los botones tal que asi:
_levelButtons[i].enabled = true;
//Para cambiar el sprite a uno desabilitado
_levelButtons[i].GetComponent<Image>().sprite = _buttonDisabledSprite;
}
}
//Esto es en el script del nivel
void Update(){
//una vez que pase de nivel aumentas en uno la cantidad de niveles completados
if(_IsEnded){
GuardarYCargar._levels++;
GuardarYCargar.Save();
}
}
Puede que sea un follo todo esto, yo tambien lo pensaba pero los playerprefs son para lo basico como por ejemplo los ajustes de los graficos, o para textos si quieres facilitar el trabajo a los traductores no oficiales como clan DLAN