Cómo pasar DATOS ENTRE ESCENAS en Unity usando PlayerPrefs

  Рет қаралды 13,186

GDT Solutions ES

GDT Solutions ES

Күн бұрын

Пікірлер
@GameDevTraum
@GameDevTraum 3 жыл бұрын
Tengo otro canal, por favor suscríbete aquí! 😄👉 www.youtube.com/@GameDevTraumDE *Aprende más de UNITY aquí* 👉 kzbin.info/www/bejne/eJPbk4Gjj5lortk
@leatherandpoemscharmyman5774
@leatherandpoemscharmyman5774 4 жыл бұрын
Excelente video , la clase PlayerPref, es un must para tener , para datos relevantes, string, float , int , medio limitado porque no guarda vectores , pero si guarda los floats, es comoda y accesible y bastante comoda para usar en cualquier lado y area de un clase. Gracias !
@GameDevTraum
@GameDevTraum 4 жыл бұрын
De una! Es bastante práctica. Estaba por hacer una serie de artículos para mostrar cómo rebuscarse para guardar otros tipos de datos con PlayerPrefs, pero hasta ahora hice el artículo para guardar bools nomás. Creo que me voy a poner con eso.
@stephanyhernandez1624
@stephanyhernandez1624 3 жыл бұрын
Excelente tutorial amigo, estábamos atorados en un proyecto por esta razón.
@aldovillela9684
@aldovillela9684 3 жыл бұрын
x2 jajaja
@nayelilopez362
@nayelilopez362 3 жыл бұрын
X3 jajaja
@halconf20
@halconf20 3 жыл бұрын
Muchas gracias, me sirvió mucho para mi proyecto
@EdoUchida
@EdoUchida 3 жыл бұрын
Saludos viejo, la verdad es que fue un excelente tutorial, sin embargo estoy un poco enredado debido a que mi proyecto consiste en lo siguiente: *Existen tres escenas. *Escena 1: Contiene un unico boton para ir a una mision. Escena 2: Contiene la mision 1. Escena 3: Contiene la mision 2. El flujo del juego consiste en lo siguiente. Iniciamos en escena 1, le damos clic al boton para iniciar una mision. --> Se inicia la Escena 2 mision 1 la cual consite en contestar 10 preguntas --> Se termina la Escena 2 mision 1 --> Regresamos a la Escena 1 ahora el boton para iniciar una mision debe de actualizarse para ir a Escena 3 mision 2. Me gustaria si me pudieras ayudar un poco con la logica de programación. De antemano gracias por leer mi mensaje.
@GameDevTraum
@GameDevTraum 3 жыл бұрын
En general hay muchas formas de resolver los problemas, voy a escribir lo que se me ocurrió, es un poco difícil de explicar pero aquí va: En PlayerPrefs habría que guardar una variable que indique el máximo nivel disponible, por defecto debería valer 1. Suponiendo que tienes 10 niveles en total, te haces los 10 botones para ir a esos niveles, quizás como hijos de un GameObject que tenga componente Vertical Layout para que se acomoden uno abajo del otro. Esos hijos estarían ordenados, es decir el primer hijo (índice 0) sería el botón para cargar el nivel 1, el segundo hijo con índice 1 sería el botón para cargar el nivel 2, etc. Entonces al iniciar el juego puedes hacer visibles los hijos hasta el máximo nivel disponible -1 y todos los demás hijos los ocultas. Con eso se resuelve lo de hacer aparecer los botones dependiendo de cuánto valga la variable que indica el máximo nivel disponible. Luego hay que ver cómo ir incrementando esa variable, por ejemplo si el máximo nivel alcanzado es 2, el jugador podría jugar al nivel 1 y al 2, si juega al nivel 1 y gana, la variable máximo nivel alcanzado no debería incrementarse. Solo cuando el jugador está jugando al nivel que coincide con el máximo nivel alcanzado y gana, ahí debería incrementarse la variable máximo nivel alcanzado y guardarla en PlayerPrefs, de esa forma en el menú aparecerá un nuevo botón. Así que hay que ver cómo hacer para saber en qué nivel se entra, por ejemplo en cada escena podrías tener un Script llamado Level, con un entero público que indica el número de nivel, por ejemplo para el nivel 1 ese entero vale 1, para el nivel 2 el entero vale 2. Entonces cuando se produce la condición de ganar, ejecutar una función dentro del script Level, si el número de nivel coincide con el máximo nivel alcanzado se incrementa el máximo nivel alcanzado y se guarda en PlayerPrefs.
@Sarv9208
@Sarv9208 2 жыл бұрын
@@GameDevTraum Hola amigo, primero excelente tus videos, lo siguiente, tengo un proyecto de preguntas también, aunque yo no retorno en las escenas solo avanzo, si tengo unas dudas para saber si puedes aclararlas: 1ro, Si exporto el proyecto como webGL e incluso lo despliego una una pagina web, ese guardado sigue funcionando o solo guarda en memoria si es local? 2do, Si yo hago 3 preguntas en cada escena que es mas optimo y liviano, en 1 escena hacer las 3 preguntas (es decir como 3 niveles diferentes en una escena) o buscar reutilizar la escena con las 3 preguntas (solo cargar los textos o preguntas sin crear mas niveles) Este ultimo no se si me hago entender
@RYRD.
@RYRD. Жыл бұрын
Amigo necesito tu ayuda, tengo 2 escenas con una variable llamada "Monedas", yo lo que busco es que al recoger las monedas en la (Escena 1) el valor de la variable “Monedas” se vaya sumando, y que al terminar el nivel, ese valor se sume a la variable “Monedas” de la (escena 2), pero cuando inicie el nivel de nuevo me quede la variable de la (escena 1) en 0 para poder seguir recogiendo monedas. como puedo lograr eso, necesito que solo se guarde el valor en la escena 2, y que se reinicie el valor en la escena 1
@zoloboy
@zoloboy Жыл бұрын
Tengo una duda esas escenas son cargadas con el mismo script?
@japon2403
@japon2403 3 жыл бұрын
Excelente video pero tengo una duda y es como le hago para refrescar la escena porque en el vídeo solo se invoco refreshUI();
@donmelonijr
@donmelonijr 3 жыл бұрын
Buenas, muchas gracias por el tutorial aunque no entiendo la razón por la que no funcionó en mi proyecto. Mi problema era que tenia que compartir una puntuación entre dos escenas con una copia del GameManager (donde se guarda la puntuación) cada una, para poder vincular los textos de puntuación de cada escena. Pero a la hora de cambiar la escena, esta puntuación no se guarda, no se si es porque son dos copias distintas del mismo programa o porque simplemente no lo estoy haciendo correctamente. Agradeceria si alguien pudiera ayudar. Muchas gracias.
@leanforever7814
@leanforever7814 3 жыл бұрын
buen video, pero tengo un problema, tengo un personaje con vida, quiero guardar su vida entre escenas, y funciona, excepto cuando moris que se guarda tu vida en 0 y en negativo
@puerkismevanjohnson2529
@puerkismevanjohnson2529 2 жыл бұрын
Y cual se supone que es el video anterior para ver bien lo del refreshUI???
@GameDevTraum
@GameDevTraum 2 жыл бұрын
Holaa, he actualizado la descripción con todos los vídeos de la serie, la verdad que estaba bastante difícil de encontrar, muchas gracias por el comentario. En general hago mis vídeos para mostrar herramientas, pieso que lo ideal sería pausar un momento aquello que quieres lograr en este momento y ver estos vídeos en los que resuelvo el pasaje de datos entre escenas pero en una situación muy particular que he planteado, entender qué es lo que quiero hacer, qué alternativas propongo y cómo se implentan estas alternativas, una vez hecho esto usar esa información para crear una solución que se adapte a tus necesidades. Dejo aquí la lista de vídeos de la mini serie: ---------------------------------------------------------- VÍDEOS DE ESTA MINISERIE 1 - Introducción + Descarga: kzbin.info/www/bejne/Z3e3ZI2fmaadsM0 //Primera estrategia en los vídeos 2 y 3 2 - Estrategia con PlayerPrefs (Planteo de la estrategia) kzbin.info/www/bejne/q6TTXmljmsaVrrc 3 - Solución con PlayerPrefs (Implementación) kzbin.info/www/bejne/a3Wao6t7mMZ9h5Y //Segunda estrategia en los vídeos 4 y 5 4-Otra estrategia usando un "Singleton" (Planteo de la estrategia) kzbin.info/www/bejne/iIW4qH6drZ2UftU 5-Usar un Singleton para intercambiar datos entre escena (Implentación) kzbin.info/www/bejne/mpS7qoWujsmabsk ---------------------------------------------------------- La estrategia con PlayerPrefs es mas simple pero solo permite pasar datos primitivos, es decir variables int, float y strings, aunque con esos datos primitivos se pueden guardar datos mas complejos. El singleton es un poco mas complejo de implementar pero tiene la facilidad de guardar datos mas complejos como vectores, incluso componentes de manera mas simple.
@puerkismevanjohnson2529
@puerkismevanjohnson2529 2 жыл бұрын
@@GameDevTraum Muchas gracias Traum!
@ProyectoPandanejo
@ProyectoPandanejo 2 жыл бұрын
@@puerkismevanjohnson2529 Disculpa pero aun no encuentro el video en cuestion con lo del refreshUI BUen video de todas maneras
@Sarv9208
@Sarv9208 2 жыл бұрын
@@GameDevTraum En mingo de los videos explicas como hacer refreshUI, en todo los videos ya lo tienes creado
@harrissarmiento1642
@harrissarmiento1642 3 жыл бұрын
Buenas, estuve leyendo en tu pagina para hacer lo mismo con strings, pero en el debug.log no me los muestra, asi que no estoy seguro si los anda guardando.
@GameDevTraum
@GameDevTraum 3 жыл бұрын
Hola la instrucción: PlayerPrefs.SetString("idDato","dato"); Donde "idDato" y "dato" son strings (conviene usar variables tipo strings). Si se ejecuta esa instrucción el dato "dato" queda guardado en la memoria bajo el nombre "idDato". En un momento posterior se puede ejecutar: string dato2=PlayerPrefs.GetString("idDato","Dato por defecto si no se ha guardado nada"); Debug.Log(dato2); Si la instrucción de guardado se ejecuta el dato tiene que quedar en la memoria.
@harrissarmiento1642
@harrissarmiento1642 3 жыл бұрын
@@GameDevTraum Este es mi codigo, intente pero, es que no veo fallas ya que hice incluso lo que hiciste en el video, pero obviamente alterando la sintaxis en donde es necesario private string nombre; private string nombrePrefsName="Nombre"; void Awake() { Cargar(); Debug.Log(nombre); } void OnDestroy(){ Guardar(); } private void Guardar(){ PlayerPrefs.SetString(nombrePrefsName, nombre); } private void Cargar(){ nombre = PlayerPrefs.GetString(nombrePrefsName,"PruebaNombre"); }
@harrissarmiento1642
@harrissarmiento1642 3 жыл бұрын
Por alguna razon al quitarle el valor a la variable nombrePrefsName y dejarla vacia, ya me guarda el string
@GameDevTraum
@GameDevTraum 3 жыл бұрын
puede ser que tengas dos instancias del script? osea que ese script lo has añadido a más de un GameObject. Si ese es el caso, cada instancia va a ejecutar la función guardar y cargar y van a guardar la información con el mismo nombre
@harrissarmiento1642
@harrissarmiento1642 3 жыл бұрын
@@GameDevTraum ah pues mira, si era eso e.e, muchas gracias
@XxshadefirestormxX
@XxshadefirestormxX 3 жыл бұрын
Saludos amigo, un excelente tutorial, me ha servido muchísimo para mi proyecto. Pero tengo una duda ¿Este código se puede utilizar para escenas que no sean idénticas? Como en tu tutorial las escenas 1 y 2 son idénticas pero que tal si quiero agregar digamos una escena 3 donde solo se pueda cambiar de escena y mostrar los datos, una escena 4 donde solo se pueda conseguir dinero, una escena 5 donde se pueda hacer todo lo mostrado en el video pero no aparezcan los datos. De antemano te agradezco de tu ayuda al leer este comentario.
@GameDevTraum
@GameDevTraum 3 жыл бұрын
holaa, sisi en mi caso es solo un ejemplo de las infinitas posibilidades, el punto es entender que la información se guarda en el disco rígido (o memoria interna de un móvil) bajo el nombre que le asignemos, luego esta información la podemos recuperar en cualquier momento, por ejemplo al cambiar de escena o cinco días despues. Para guardar la información los métodos Set de PlayerPref (SetInt, SetFloat y SetString), para cargar la información los métodos Get (GetInt, GetFloat y GetString), además estos métodos se pueden combinar y guardar datos más complejos, por ejemplo un Vector3 para la posición del personaje, se necesitarían guardar 3 datos tipo float para las componentes X, Y y Z. Entonces en cada escena tu tendrías que leer la información guardada y hacer con ella lo que necesites. Como extra, si ejecutas la instrucción: PlayerPrefs.DeleteAll(); Se eliminan todos los datos guardados, esto puede ser un poco peligroso, pero sirve cuando hay que probar varias veces el funcionamiento de cosas que se muestran una única vez, por ejemplo este cartel de no volver a mostrar: kzbin.info/www/bejne/rqCchKuIoMppa68
@XxshadefirestormxX
@XxshadefirestormxX 3 жыл бұрын
@@GameDevTraum He estado experimentando un poco con tus códigos y la verdad es que he aprendido bastante, sin embargo estoy atorado en uno de mis experimentos y me serias de muchísima ayuda si me asesoraras. Continuando con el ejemplo que muestras en este video, agregue un botón llamado "Reiniciar" y agregue las siguientes líneas de código al "GenericScript" public void BorrarTodo() { PlayerPrefs.DeleteAll(); } Esto hasta el fondo del código, con el fin de al momento de presionar el botón "Reiniciar " todos los valores volvieran a cero, pero no ocurrió nada, los valores de MONEY e ITEMS siguen guardados en todas las pantallas. ¿Podrías ayudarme un poco para que todos los valores regresen a cero?
@GameDevTraum
@GameDevTraum 3 жыл бұрын
@@XxshadefirestormxX pero al reiniciar el juego si vuelven a cero verdad?
@XxshadefirestormxX
@XxshadefirestormxX 3 жыл бұрын
@@GameDevTraum No, en ningun momento regresan a cero.
@GameDevTraum
@GameDevTraum 3 жыл бұрын
@@XxshadefirestormxX Pon un: Debug.Log("Se ha borrado todo"); Dentro de la función BorrarTodo, para asegurarte de que se esté ejcutando, el mensaje tiene que aparecer en consola, Si estás seguro que se está ejecutando, entonces el problema está en los valores por defecto, al momento de hacer la carga de la información con los PlayerPrefs.Get, ahí se suele asignar un valor por defecto en caso de no encontrar información guardada, esos valores quizás deberían ser cero
@natalyarbelaeznunez3797
@natalyarbelaeznunez3797 4 жыл бұрын
Muy buen video. Funciona muy bien para conservar los datos entre los cambios de escena, pero si no quiero que se sigan almacenando esos datos cuando salgo del juego y vuelvo a ingresar, ¿cómo lo configuro?. Gracias!
@GameDevTraum
@GameDevTraum 4 жыл бұрын
Mmm si utilizas PlayerPrefs tendrías que borrar todos los datos al salir, hay un método, creo que es PlayerPrefs.DeleteAllKeys(), sin embargo en este caso quizás sería mejor usar las partes 4, 5 y 6 de esa mini serie de vídeos, que hablan sobre el concepto de singleton, cómo implementarlo y cómo usarlo para pasar datos entre escenas. La idea es tener un GameObject con un script asignado que contiene la información y el GameObject no se destruye al cambiar de escenas, de esa forma se conservan los datos y se pueden leer desde la otra escena
@natalyarbelaeznunez3797
@natalyarbelaeznunez3797 4 жыл бұрын
@@GameDevTraum Gracias, lo probaré!
@ReinaYT
@ReinaYT 2 жыл бұрын
Tutorial Unity | Como guardar y cargar datos con PlayerPrefs
20:22
Unity - Como pasar objetos entre escenas 2D y 3D
12:28
Don Pachi
Рет қаралды 8 М.
“Don’t stop the chances.”
00:44
ISSEI / いっせい
Рет қаралды 61 МЛН
Beat Ronaldo, Win $1,000,000
22:45
MrBeast
Рет қаралды 158 МЛН
99.9% IMPOSSIBLE
00:24
STORROR
Рет қаралды 31 МЛН
How Omar got out of Sednaya Prison | كيف هرب عمر من سجن صيدنايا
22:51
Sarde After Dinner - سردة
Рет қаралды 3,2 МЛН
Singletons en Unity (o cómo conservar objetos entre escenas)
13:22
Damián González
Рет қаралды 15 М.