Cómo guardar y cargar un VECTOR con PlayerPrefs en Unity

Introducción

En Uni­ty, la clase Play­er­Prefs no tiene un méto­do especí­fi­co para guardar vec­tores, sin embar­go tiene tres fun­ciones que per­miten guardar datos de tipo entero, float y strings, a estos tipos de vari­able se los conoce como vari­ables prim­i­ti­vas y con ellas es posi­ble recon­stru­ir otras estruc­turas de datos mas com­ple­jas, y es que un vec­tor de R2 o R3, si lo pen­samos, no es mas que un arreg­lo de tres vari­ables de tipo float, que cada una ocu­pa una posi­ción o tiene un significado.

Cómo guardar y cargar DATOS con PlayerPrefs en Unity
🟢

MIRA ESTE DESCABELLADO EXPERIMENTO

Paquete para descargar con la solución implementada

A con­tin­uación puedes descar­gar el paque­te de Uni­ty con el ejem­p­lo que vamos a analizar en este artícu­lo, así lo puedes impor­tar y pro­bar­lo direc­ta­mente en tu pro­pio ordenador.

paquete de unity con solucion implementada para guardar y cargar vector3 en unity
Fig. 1: Archivos que con­tiene el paque­te de descar­ga al importarlo.

Análisis de cómo guardar un Vector3 con PlayerPrefs

La idea es descom­pon­er el vec­tor en sus com­po­nentes que son datos de tipo float y guardar­las de man­era indi­vid­ual con Play­er­Prefs, luego, al momen­to de hac­er la car­ga de datos, recu­per­ar cada com­po­nente de la memo­ria y crear un nue­vo vec­tor usan­do esas componentes. 

En la esce­na que viene en el paque­te de descar­ga ya se encuen­tra mon­ta­da la solu­ción, en la figu­ra 2 vemos cómo está com­pues­ta la jer­ar­quía, ten­emos un GameOb­ject lla­ma­do "Save­DataScript" que es el que tiene asig­na­do el Script que vamos a analizar (ver figu­ra 3) y este se encar­ga de hac­er el guarda­do y la car­ga de datos. Luego ten­emos otro GameOb­ject lla­ma­do "Object­ToSave­Po­si­tion" que es un cubo al que le guardare­mos su posi­ción para poder car­gar­la al ini­ciar la esce­na. Obser­ven que en el inspec­tor en la figu­ra 3, nue­stro Script tiene una ref­er­en­cia a este obje­to, esto le per­mi­tirá leer y mod­i­ficar sus vari­ables o eje­cu­tar fun­ciones sobre este GameOb­ject, siem­pre insis­to que enten­der el con­cep­to de ref­er­en­cia en pro­gra­mación es un pilar muy impor­tante en el desar­rol­lo de apli­ca­ciones con Uni­ty, en este link encon­trarás una lista de repro­duc­ción de mi canal sobre ref­er­en­cias en pro­gra­mación y difer­entes méto­dos para encon­trar­las.

paquete de unity con solucion implementada para guardar y cargar vector3 en unity
Fig. 2: Archivos que con­tiene el paque­te de descar­ga al importarlo.
paquete de unity con solucion implementada para guardar y cargar vector3 en unity
Fig. 3: Archivos que con­tiene el paque­te de descar­ga al importarlo.

Script que se encargar de guardar y cargar el vector

En la figu­ra 4 vemos una parte del Script del guarda­do de datos que viene en el paque­te, vemos que está defini­da la vari­able "objectWith­Saved­Po­si­tion" de tipo GameOb­ject que aparece en el inspec­tor de la figu­ra 3 y tam­bién vemos los méto­dos Awake y Start, que son fun­ciones que Uni­ty eje­cu­ta automáti­ca­mente en dis­tin­tos tiem­pos den­tro del ciclo de vida de la apli­cación. Den­tro se eje­cu­ta una fun­ción lla­ma­da "Load­Da­ta" que es la que se encar­ga de car­gar la infor­ma­ción, la vemos mas ade­lante. La car­ga de datos es algo que nor­mal­mente ocurre al ini­ciar una esce­na, a veces pueden sur­gir prob­le­mas depen­di­en­do de dónde se haga la car­ga de datos, recordemos que las fun­ciones Start se eje­cu­tan una atrás de otra para cada GameOb­ject en un orden que no podemos pre­de­cir o que sería tedioso pre­de­cir, imag­i­nen que un Script en su fun­ción Start uti­liza vari­ables de otro Script que aún no ha car­ga­do sus datos!

paquete de unity con solucion implementada para guardar y cargar vector3 en unity
Fig. 4: Archivos que con­tiene el paque­te de descar­ga al importarlo.

En los jue­gos se sue­len ten­er ata­jos para guarda­do y car­ga ráp­i­da, en la figu­ra 5 ten­emos unas instruc­ciones que hacen pre­cisa­mente esto, noten que al pre­sion­ar F5 se eje­cu­ta una fun­ción lla­ma­da "Save­Da­ta" que se encar­ga de hac­er el guarda­do, sería con­ve­niente que el guarda­do de todas las vari­ables nece­sarias se haga den­tro de esa fun­ción o que en el inte­ri­or se lla­men a otras fun­ciones que se encar­guen de guardar otros datos, de esa for­ma una vez que eje­cu­ta­mos la instruc­ción Save­Da­ta esta­mos seguros de que toda la infor­ma­ción se ha guarda­do, lo mis­mo para la fun­ción "Load­Da­ta" que se encar­ga de leer los datos guarda­dos en la memo­ria e ini­cializar las vari­ables con esos datos.

paquete de unity con solucion implementada para guardar y cargar vector3 en unity
Fig. 5: Archivos que con­tiene el paque­te de descar­ga al importarlo.

Ejemplo de cómo guardar un Vector3 utilizando PlayerPrefs

En la figu­ra 6 se mues­tra el con­tenido de la fun­ción Save­Da­ta que es la que se encar­ga de guardar los datos del vec­tor que pos­te­ri­or­mente nos per­mi­tirán recon­stru­ir­lo. Obser­ven que primero se hace una descom­posi­ción del vec­tor que se quiere guardar en sus vari­ables X, Y y Z, se las alma­ce­na en las vari­ables tem­po­rales "posi­tionX", "posi­tionY" y "posi­tionZ".

El guarda­do de datos con Play­er­Prefs se hace en las últi­mas tres instruc­ciones, obser­ven el nom­bre que se pasa como eti­que­ta de esos guarda­dos, estos nom­bres deber­e­mos usar­los en la car­ga de datos para poder recuperarlos.

paquete de unity con solucion implementada para guardar y cargar vector3 en unity
Fig. 6: Archivos que con­tiene el paque­te de descar­ga al importarlo.

Ejemplo de cómo cargar un Vector3 utilizando PlayerPrefs 

En la figu­ra 7 se mues­tra el con­tenido de la fun­ción Load­Da­ta que es la que se encar­ga de car­gar los datos alma­ce­na­dos en la memo­ria y hac­er una recon­struc­ción del vec­tor, la car­ga es el pro­ce­so inver­so, primero recu­per­amos los datos de la memo­ria, esto lo hace­mos con las fun­ciones Get­Float de Play­er­Prefs, pasan­do la eti­que­ta que se usó para cada dato y en este ejem­p­lo incluyo el val­or 0 en caso de que no exista infor­ma­ción alma­ce­na­da ante­ri­or­mente, esto nos per­mite lla­mar­lo direc­ta­mente en Start y que no haya con­flic­tos la primera vez que la apli­cación se ejecute. 

La sigu­iente instruc­ción se encar­ga de crear el Vector3 a par­tir de los datos recu­per­a­dos de la memo­ria, Vector3 y en gen­er­al la may­oría de las clases tienen con­struc­tores que nos per­miten crear los datos dán­doles val­ores iniciales. 

El prob­le­ma no ter­mi­na aquí, ya que hemos leí­do la infor­ma­ción, recu­per­a­do el vec­tor pero aún no le hemos dicho a nue­stro GameOb­ject que se posi­cione cor­rec­ta­mente, esto se hace en la últi­ma instruc­ción de la figu­ra 7.

paquete de unity con solucion implementada para guardar y cargar vector3 en unity
Fig. 7: Archivos que con­tiene el paque­te de descar­ga al importarlo.

YouTube
Scroll al inicio
Secured By miniOrange