Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Alguien inteligente y con tiempo para ayudarme?

Iniciado por gonzalitosk8, Febrero 17, 2016, 12:44:45 AM

Tema anterior - Siguiente tema
Hola gente, Espero que todos estén bien.
tengo un dilema que todos afrontaron, pero no se si todos buscan lo mismo.

estoy rompiéndome la cabeza para crear un sistema de partidas (crear, guardar, cargar, eliminar).
lo que quiero hacer:
- crear una partida nueva (nombre, dificultad de juego, dinero, experiencia) eso va bien, ya que utilizo playerprefs.
- cambiar de jugador ( en este caso un vehiculo ) al cual entro a un local (trigger) y me deriva a x escena.
si estoy usando un "ford" y compro un Bmw, quisiera que el gameobject se reemplazara por el nuevo (y guardar el otro en una lista)
asi mismo, poder modificar variables de objetos dentro de otro (alerones, faldones, llantas, etc) se me habia ocurrido utilizar una lista de objetos, marcados por int (aleron "nombre") = 2. entonces poder manejar ese gameobject mediante playerprefs.
una vez que termine con las modificaciones del objeto, guardar la partida y cambiar de escena y mantener los datos y cambios de coches o objetos en la otra escena. intente utilizar DontDestroyOnLoad(), pero la verdad es que a veces, puede ocacionar problemas.

alguien que tenga un poco de tiempo y se anime a orientarme un poco mas sobre este tema?

* para el amargado que seguramente ponga, "existe el buscador" ya me pase por todas las paginas, pero lo unico que encontre, fue sobre puntuacion, vida y dinero,espero una ayuda o guia que me pueda ser util! saludos a todos!

Puedes guardar sólo los datos de los coches cargar un prefabricado de resources y modificar los valores, me explico: prueba a guardar los datos de un coche en playerprefs, me refiero a las variables que use tu coche de la manera 'nombreVariable1', así con todas las que te interese mantener. Este trozo de código lo pones en una función, luego crea otra función en la que cargues los mismos datos del coche, estas dos funciones estarán en un script nuevo, que haría de gestor. Asegúrate de guardar información del coche para diferenciarlo como la marca o modelo y un ID de tipo entero que va a ser muy útil. Ahora prueba a crear otro coche, debe tener las mismas variables, aunque tenga valores diferentes. El id debe ser uno más que el id mayor, es buena idea empezar por el 0 e ir subiendo. Con estos dos coches haces las pruebas de guardar y cargar los datos de los coches, el gestor debe saber cuántos coches tienes, puede mirarlo en otro script o guardar todos los que tengan el tag 'X' en la escena, para guardarlos haces un bucle for, en el que guardas los datos de la forma 'string nombreVariable = "velocidadMax" + i' donde i es el contador del bucle, para eso has hecho una función que te guarda los datos del coche antes. Guardas además el id en un playerpref que se llame numeroCoches, así el id del último coche te dirá cuántos tienes. Para cargarlos es lo mismo, buscas el playerpref numeroCoches y así sabes cuántas veces tienes que llamar la función de carga.Todo esto es una especie de arquitectura o guion de programación y es muy útil antes de empezar a escribir código, espero que te sirva

Febrero 17, 2016, 09:58:47 AM #2 Ultima modificación: Febrero 17, 2016, 10:01:23 AM por Arthure
Querer guardar los datos de los coches disponibles + los accesorios disponibles para cada uno utilizando Playerprefs me parece una solucion un tanto ... bruta, burrada o llamase como se quiera xD eso por no mencionar que solo permite guardar datos de tipo entero, flotante o cadena de texto; no habria por donde cogerlo.Existen multitud de soluciones que te permiten guardar y cargar datos referentes a objetos (bases de datos sencillas, xml, binario, etc.) que serian mucho mas correctas para el objetivo que quieres conseguir; para este punto te diria que utilizaras el buscador, pero como has dejado claro que no quieres que te digan eso y explicar como utilizar todas y cada una de las opciones seria demasiado extenso (sin mencionar no hay obligacion) ... pasapalabra xD de ti depende buscar o no.Por ultimo, te dare un buen consejo que es de super buen rollo  Dices que te pasaste por todas las paginas, pero es que si buscas "Como guardar coches y sus modificaciones" (o cualquier cosa parecida) seguramente no encontraras nada, porque eso significaria que deberia haber un tutorial para cada cosa que cualquier persona pudiera querer hacer ... imaginate, seria una locura.Por tanto, mi consejo es que aprendas programacion, y asi no necesitaras un tutorial tan especifico; cuando sepas y entiendas programacion, podras aplicar y adaptar cualquier cosa a tus necesidades ... por ejemplo entre un sistema de inventario para un personaje estilo RPG (de esos hay miles) y lo que quieres hacer tu, no hay absolutamente ninguna diferencia (si sabes programacion).Un cordial saludo y suerte

Yo creo que más que código, deberías diseñarte un modelo de datos para aplicarlo sobre una bbdd, sqllite p.ej.
Yo creo que más que código, deberías diseñarte un modelo de datos para aplicarlo sobre una bbdd, sqllite p.ej.

Febrero 17, 2016, 12:08:03 PM #4 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
Para lo de salvar partidas, tienes que buscar alguna manera de salvar los datos en el disco duro, hay varios métodos, el que viene mejor integrado con Unity es el PlayerPrefs, que te permite guardar datos de variables en el registro de windows (en el sector designado para tu juego), Puedes ver las funciones del Playerprefs aqui:  http://docs.unity3d.com/ScriptReference/PlayerPrefs.htmlBásicamente vas metiendo valores con el Set___  y lo salvas al final con el Save, cuando quieras cargar algo, usas el Get_____.

Lo "complicado" no es tanto el tema de la programación en sí, si no como la estructuración, piensa que cada partida salvada, tiene que guardar una serie de datos, esos datos a guardar los eliges tu, pero por poner unos ejemplos, estos podrían ser el nombre, fecha, último nivel desbloqueado, puntuación obtenida... la lista se puede alargar de manera significativa. Y todo eso, solo para 1 ranura de guardado, en mi juego estoy usando 4, tu puede que quieras usar 20, a lo mejor alguien no quiere ponerle límite.

Bueno, 2 o 200, el inconveniente es el mismo, cómo identificar qué variables pertenecen a cada ranura, (cada slot tiene una variable "nombre" ¿Como saber cual es de cada uno?. Bueno, yo lo resolví poniendo más información en el nombre de las variables, con un índice que lo salvo en otra variable, la he llamado "perfil activo".
Cuando salvo en una ranura, miro cual es mi PerfilActivo, y uso ese dato para añadirlo al nombre de las variables, PerfilActivo+nombre, PerfilActivo+fecha, PerfilActivo+ultimonivel, PerfilActivo+puntuacion, etc...  así, sí mi perfil activo es el 3, pues la variable se llamará 3nombre, 3fecha... si mi perfil activo es el 200, pues serán 200nombre, 200fecha...  Y para cargar, vuelvo a usar la variable para guiarme, PerfilActivo+nombre, PerfilActivo+fecha...Ese "perfilactivo" sería lo que cambiarías en el menu de cargar al elegir las distintas ranuras.y lo usas pere elegir los distintos grupos de datos que has guardado en la lista de registro. Así que sabiendo eso, para el sistema de guardado deberás crear: - 1 código, que resetee la base de datos del registro (Muy útil para ir desarrollando y probando), basicamente es crear una función if con una variable pública bool y dentro, la función de DeleteAll, seguido de las estructuras básicas de la base de datos.- 1 código que salve los datos que quieras, con idea de que cuando quieras salvar algo, tan sólo tengas que llamar esta función.- 1 código que cargue los datos de la base de datos y los aplique a tu juego actual para modificarlo de manera que simule la carga de la partida. Igual, para activar este código cuando quieras cargar (ya sea por un botón, o un disparador...)  

http://wiki.unity3d.com/index.php/ArrayPrefs2" rel="external nofollow">http://wiki.unity3d.com/index.php/ArrayPrefs2https://www.assetstore.unity3d.com/en/#!/content/4962" rel="external nofollow">https://www.assetstore.unity3d.com/en/#!/content/4962Con estos podras guardar arrays y mas cositas.Tambien podrias utilizar Json, serializar  algun dictionary o alguna array multidimensional,maneras hay mil,yo en su dia me hice un archivo de texto donde guardaba los niveles asi en mi juego solo hay una escena y genero el nivel con ese archivo de texto,y pase de 12mb por escena/nivel a unos 90kb ,lo combiertes a binario y lo encriptas y asi es mas seguro que no el playerprefs que cualquiera te lo revienta en 2 min y hace lo que quiere,nada bueno si tienes compras integradas o monedas que conseguir. Pero antes de ponerte a picar codigo coge papel y boli y te haces la logica y la estructura de como quieres que funcione.

Tienes razón, se me olvido mencionar que quizá es mejor usar SQLite... 

Muchisimas gracias a todos! investigare a profundidad sus recomendaciones!  

Etiquetas: