No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Introducci贸n a Unity: Scripting

Curso de Introducci贸n a Unity: Scripting

Ruth Margarita Garc铆a L贸pez

Ruth Margarita Garc铆a L贸pez

Clases serializables

6/24
Recursos

Aportes 1

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

<h5>Veremos:</h5>
- C贸mo crear clases serializables
- Crear dos componentes y comunicarlos entre s铆;
- Crear un JSON para almacenar datos mediante clases serializables y
- guardarlo en PlayerPrefs.

Clases serializables

nos permiten

Guardar/persistir datos de objetos, incluso despu茅s de cerrar el juego.

Para entrar en este concepto primero vamos a ver

c贸mo dos objetos se comunican entre s铆 a trav茅s de variables p煤blicas;

en este caso Mar铆a le quiere pedir hamburguesas como almuerzo a Bob. 
Para lograr la comunicaci贸n vamos a:

BASE: Crear y conectar los objetos

- Crear un script Bob y declarar una variable p煤blica almuerzo de tipo string ;
- Crear un script Maria y declarar una variable p煤blica esposo de tipo Bob, que podr谩 ser asignada con alg煤n objeto existente.

- Crear GameObject para cada uno y a帽adirle su script respectivo.
<h5>"Para seleccionar el objeto que cubra la variable esposo de Maria, podr铆amos elegir:</h5>
  1. Por dentro de la variable presentada en el Inspector apretar el 铆cono circular que aparece en su extremo, el cual desplegar谩 un men煤 de los objetos aplicables.
    ||
  2. Arrastrar el objeto desde Hierarchy hasta ese mismo sitio.

Nota: para evitar tropiezos con el click del arrastre, podemos BLOQUEAR la selecci贸n del Objeto (Maria) con el bot贸n del candado en la esquina superior derecha del Inspector y maniobrar todo el editor con la seguridad de que no se ir谩 a deseleccionar accidentalmente.
Ahora podemos

CONFIGURACI脫N del env铆o del mensaje

  • Declarando una variable p煤blica string llamada antojo en Maria; para luego
  • Asignar antojo como la re-asignaci贸n de la variable almuerzo en Bob, desde la activaci贸n (OnEnable) de Mar铆a.

El script de Mar铆a:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Maria : Monobehaviour {
	public Bob esposo;
	public string antojo;
	
	void OnEnable () {
		esposo.almuerzo = antojo;
	}

El script de Bob:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Bob : Monobehaviour {
	public string almuerzo;
}

Persistencia conPlayerPrefs

鈥淢ar铆a tiene Mascota鈥

-agregamos una variable p煤blica del tipo Mascota llamada pepito en el script de Maria;

-Mascota es la siguiente clase:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[System.Serializable]
public class Mascota {
	public string nombre;
	public string juguetePreferido;
	[Range(0,1)]
	public float aburrimiento;
}

X Nuestro problema es que las modificaciones en pepito no persisten al reinicio del juego

Pero la clase Mascota esta decorada para ser serializable, y
todo obj. serializable puede convertirse en un

Archivo JSON (Javascript Object Notation)

Los JSON se suelen utilizar para enviar distintos tipos de datos 鈥渢raducidos鈥 a puro texto
entre una p谩gina/app y un server.
.
A su vez el server puede enviar un JSON y la p谩gina/aplicaci贸n traducir su texto de vuelta a objetos de su lenguaje (p.e JavaScript).

<h5>Para implementarlo podr铆amos agregar en el script de Mar铆a:</h5>
  • una variable p煤blica string de nombre jsonPepito
  • Y a esta, dentro de un OnDisable le vamos a asignar el m茅todo para transformar a Json, con la variable pepito como par谩metro:
  • void OnDisable () {
    jsonPepito = JsonUtility.ToJson(pepito);
    }
  • De esta forma, las modificaciones en pepito quedan guardadas como texto JSON鈥 Ahora tenemos que
<h5>Recuperar el JSON para aplicarlo a pepito, cuando reactivemos su objeto</h5>

Para esto

  • Dentro del OnEnable re-asignamos a la variable pepito = con el m茅todo gen茅rico que reciba el tipo de dato que este fue antes de convertirse a JSON (instancia de la clase Mascota) y el dicho JSON como objeto par谩metro a convertir (jsonPepito)

  • Toda esta conversi贸n la vamos a condicionar, para que suceda solo si jsonPepito no est谩 vacio

    void OnEnable () {
    esposo.almuerzo = antojo;
    if (jsonPepito != " ") {
    pepito = JsonUtility.FromJson<Mascota>(jsonPepito);

  • pero鈥

X El problema con esto es que las modificaciones sobreviven a la desactivaci贸n del objeto, m谩s no se guardan. Por suerte contamos con:

PlayerPrefs

Esta utilidad de Unity permite persistir el estado de los objetos, guard谩ndolos en la consola o PC que ejecuta el juego.
Es como una base de datos almacenados en formato clave : valor.

La clave sirve para identificar el valor a guardar.
El valor puede ser string, integer, float

Para implementarlo vamos a

  • Sobrescribir el OnDisable, esta vez invocando PlayerPrefs para guardar el Json de pepito como string.
<h5>sint谩xis del m茅todo:</h5>

(1er parametro:鈥渘ombreDeClave鈥, 2do parametro: el valor a guardar):

	void OnDisable () {
	PlayerPrefs.SetString("mascotaDeMaria", JsonUtility.ToJson(pepito))
	}
  • Finalmente modificamos la llamada al JSON en el OnEnable y su respectivo if
    Para adaptarla al uso de PlayerPrefs:

    void OnEnable () {
    esposo.almuerzo = antojo;
    if (PlayerPrefs.HasKey(鈥渕ascotaDeMaria鈥)) {
    pepito = JsonUtility.FromJson<Mascota>(PlayerPrefs.GetString(鈥渕ascotaDeMar铆a鈥));

Si quisi茅ramos reiniciar estos valores podemos hacerlo desde la pesta帽a Edit y Clear all PlayerPrefs.