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:
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
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
//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

