Clases serializables
Clase 6 de 24 • Curso de Introducción a Unity: Scripting
Resumen
¿Cómo se comunican los componentes en Unity?
En el mundo de la programación de videojuegos, lograr una comunicación fluida entre distintos componentes es fundamental. Aquí exploraremos la comunicación entre los componentes a través de variables públicas, de manera que dos clases puedan 'hablar' entre sí y compartir información vital.
Comunicación entre dos componentes
Para que un componente pueda transmitir información a otro, se emplean las variables públicas. Tomemos un ejemplo práctico: María y Bob son dos componentes. María desea enviarle un mensaje a Bob, quien está en su cabina planeando el almuerzo.
- Declaración de variables públicas: María puede tener una variable pública del tipo
Bob
, a la que llamamosesposo
. Esto le permite identificar a Bob como su esposo dentro de la escena.
public Bob esposo;
- Asignación en Unity: En el editor de Unity, puedes asignar físicamente el objeto correspondiente al campo
esposo
arrastrando el objeto Bob a ese campo en el Inspector.
Activación de scripts y comunicación de datos
Imaginemos que María tiene un antojo específico para el almuerzo, que desea comunicarle a Bob.
- Definición de antojo de María: Utilizando una variable pública de tipo
string
llamadaantojo
, se puede determinar el deseo de María cada vez que el componente se activa.
public string antojo;
void OnEnable() {
esposo.almuerzo = antojo;
}
- Simulación en Unity: Al activar y desactivar el script de María, se transmite el deseo de almuerzo a Bob, alterando su plan inicial de preparación respecto a las lentejas.
Clases serializables y JSON en Unity
La serialización permite guardar y recuperar el estado de un objeto, esencial para que los datos persistan incluso cuando se cierra el juego. Profundicemos en cómo transformar los objetos en JSON y almacenarlos adecuadamente.
¿Qué es una clase serializable?
Las clases serializables son aquellos objetos que pueden transformarse en un formato que Unity y otras interfaces, como los servidores web, pueden entender. En nuestro caso, utilizamos JSON para este propósito.
- Definición de clase Mascota: Una clase que incluye atributos como nombre, juguete preferido y nivel de aburrimiento.
[System.Serializable]
public class Mascota {
public string nombre;
public string juguetePreferido;
public float nivelDeAburrimiento;
}
Transformación de objetos a JSON
El proceso de transformación de un objeto en JSON permite representar sus datos en strings legibles y almacenables.
- Conversión a JSON: Para convertir una clase
Mascota
, implementamos el métodotoJSON
.
string jsonPepito = JsonUtility.ToJson(miMascota);
Almacenamiento usando PlayerPrefs
Los PlayerPrefs son esenciales para guardar datos entre sesiones de juego. Se utilizan para almacenar JSONs convertidos para posterior recuperación.
- Guardar JSON en PlayerPrefs: Utilizamos
setString
para guardar JSONs en la memoria del sistema.
PlayerPrefs.SetString("MascotaDeMaría", jsonPepito);
- Recuperación de datos almacenados: Antes de recuperar un JSON, comprobamos si existe una clave para asegurar una correcta carga del objeto.
if (PlayerPrefs.HasKey("MascotaDeMaría")) {
string jsonPepito = PlayerPrefs.GetString("MascotaDeMaría");
miMascota = JsonUtility.FromJson<Mascota>(jsonPepito);
}
Buenas prácticas para la memoria y la gestión de datos
A lo largo del desarrollo, es crucial asegurar que los datos se mantengan coherentes y que las claves de acceso y recuperación en PlayerPrefs se manejen de manera adecuada.
- Nombres de claves únicos: Evita conflictos utilizando nombres descriptivos y únicos para cada valor a guardar.
- Revisión regular: Borra los PlayerPrefs regularmente durante la fase de desarrollo para evitar datos inconsistentes.
- Pruebas desde cero: Siempre realiza pruebas desde un estado inicial para verificar que todo el sistema de guardado funcione adecuadamente.
Estos consejos aseguran que, ya sea que María tenga un antojo o Pepito prefiera un juguete diferente, Unity recordará sus preferencias y las gestionará de una sesión a otra.
Involúcrate más en el emocionante mundo del desarrollo de juegos persistentes y sigue explorando el potencial que ofrecen las clases serializables y los mecanismos de almacenamiento en Unity. ¡Tu juego puede convertirse en una obra maestra interactiva y perdurable!