Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: javi89SFC en Marzo 07, 2017, 02:32:19 PM

Título: Guardar Progreso
Publicado por: javi89SFC en Marzo 07, 2017, 02:32:19 PM
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)
Título: Guardar Progreso
Publicado por: lightbug en Marzo 07, 2017, 02:46:45 PM
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
Título: Guardar Progreso
Publicado por: javi89SFC en Marzo 07, 2017, 03:08:38 PM
ok!! gracias 
 
Me pongo manos a la obra jejejje
Título: Guardar Progreso
Publicado por: 0c0de en Marzo 07, 2017, 04:27:17 PM
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