Guardar el progreso del jugador y lograr que dos scripts se hablen entre sí son habilidades fundamentales para cualquier proyecto en Unity. Aquí se explica paso a paso cómo conectar componentes mediante variables públicas, cómo convertir objetos en JSON gracias a las clases serializables y cómo almacenar esa información con PlayerPrefs para que sobreviva incluso al cerrar el juego.
¿Cómo se comunican dos componentes propios en Unity?
La forma más directa de conectar dos scripts es a través de una variable pública cuyo tipo sea el componente destino. En el ejemplo, el script María declara una variable pública de tipo Bob llamada esposo [0:43]. Esto crea un campo en el inspector donde se puede asignar el objeto de la escena que contiene el componente Bob.
Existen dos maneras de asignar esa referencia:
- Hacer clic en el círculo selector del campo, que muestra todos los objetos con ese componente [1:23].
- Arrastrar directamente el objeto desde la jerarquía hasta el campo del inspector [1:33].
Un detalle importante es el candado del inspector [1:55]. Al activarlo, el panel queda fijo en el objeto seleccionado sin importar qué se seleccione después. Olvidar desactivarlo es un error frecuente que provoca confusión al asignar componentes a objetos equivocados [2:10].
Una vez que María tiene la referencia a Bob, puede modificar sus propiedades. En el método OnEnable, María asigna su antojo a la propiedad almuerzo de Bob [2:50]. Al activar el script en tiempo de ejecución, el valor cambia de inmediato: Bob pasa de planear lentejas a preparar hamburguesas [3:25].
¿Qué es una clase serializable y cómo se convierte en JSON?
Una clase serializable es una clase marcada con el atributo [System.Serializable] que Unity puede mostrar en el inspector y, sobre todo, puede transformar en una cadena de texto con formato JSON [4:15]. JSON (JavaScript Object Notation) es un estándar de comunicación usado tanto en videojuegos como en servidores y páginas web.
El script Mascota tiene tres campos: nombre, juguetePreferido y aburrimiento [4:05]. María declara una variable pública de tipo Mascota llamada Pepito. Al jugar, se le asignan valores: nombre "Pepito", juguete "pelota" y un nivel de aburrimiento.
¿Cómo se genera el JSON de un objeto?
Para convertir el objeto en texto se usa JsonUtility.ToJson(pepito) dentro del método OnDisable [5:30]. Esto devuelve un string con la estructura del objeto:
csharp
string jsonDePepito = JsonUtility.ToJson(pepito);
El JSON resultante contiene cada campo con su valor: el nombre como string, el juguete como string y el aburrimiento como número [5:55].
¿Cómo se reconstruye el objeto a partir del JSON?
El proceso inverso se realiza con JsonUtility.FromJson<Mascota>(json) [6:15]. Es un método genérico: entre los signos <> se indica el tipo original del objeto. Solo se ejecuta si el string no está vacío, evitando errores cuando aún no hay datos guardados.
csharp
if (jsonDePepito != "")
pepito = JsonUtility.FromJson<Mascota>(jsonDePepito);
¿Cómo persistir datos con PlayerPrefs entre sesiones de juego?
PlayerPrefs es un sistema de almacenamiento integrado en Unity que guarda pares de clave-valor en la memoria de la computadora o dispositivo [7:45]. Funciona en builds para Android, PC o cualquier consola.
Soporta tres tipos de datos:
- Strings con
SetString / GetString.
- Enteros con
SetInt / GetInt.
- Flotantes con
SetFloat / GetFloat.
Para guardar el JSON de la mascota, en OnDisable se escribe:
csharp
PlayerPrefs.SetString("mascotaDeMaria", jsonDePepito);
La clave sigue la convención Pascal Case sin espacios ni tildes [8:10]. Para recuperar el dato en OnEnable, primero se verifica que la clave exista con PlayerPrefs.HasKey("mascotaDeMaria") [8:45]. Solo si existe se lee el string y se reconstruye el objeto:
csharp
if (PlayerPrefs.HasKey("mascotaDeMaria"))
pepito = JsonUtility.FromJson<Mascota>(PlayerPrefs.GetString("mascotaDeMaria"));
Al detener y volver a iniciar el juego, la mascota de María reaparece con los mismos datos que tenía antes [9:25]. Si se necesita simular un inicio limpio, basta con ir a Edit → Clear All PlayerPrefs para borrar todos los datos almacenados [9:50].
Estas tres herramientas —comunicación por referencia, serialización a JSON y almacenamiento con PlayerPrefs— forman la base para manejar estado y persistencia en proyectos Unity. ¿Has probado combinar varias clases serializables en un solo JSON? Comparte tu experiencia en los comentarios.