Jump to content

Search the Community

Showing results for tags 'serialización'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General
    • Proyectos
    • Offtopic
    • Unity Feeds
    • Website
    • Youtube
  • Mesa de ayuda
    • Unity
    • Arte
    • Builds & Dispositivos
    • Otras Especialidades
  • Aportes de la Comunidad
    • Recursos
    • Eventos
  • Bolsa de trabajo & Colaboraciones
    • Ofertas y Demandas
  • Post Antiguos
    • General (Antiguo)

Blogs

There are no results to display.

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Especialidad

Found 3 results

  1. Hola, hace unos dias me esta quemando el coco lo siguiente: Tengo dos escenas, La primera es una interfaz general, contiene menu principal, nuevo perfil, opciones, etc (solo una camara basicamente con menus). La segunda es el juego en si (tiene un Player con muchas funcionalidades), y tengo pensado que sea una sola escena entera. De entrada (en la escena 1) tengo un objeto (con DontDestroyOnLoad) que instancia una clase que se llama Game (singleton) que tiene informacion del estado actual del juego (si esta en menu, en running, en pausa, en skills(para las habilidades), si hay que guardar o cargar ) y a su vez el mismo objeto tiene otra clase llamada GameData que contiene funcionalidad de datos y ademas una clase serializable de los datos a guardar (objeto1, skill1, skill2 , ... posx,posy y posz), esta misma clase serializa y deserializa los datos y los guarda o carga en un directorio que yo indique. public class GameData : MonoBehaviour{ private int numeroPerfil; private SerializableData data = new SerializableData (); private bool loadingData; public bool isLoading() { return loadingData; } private void ResetData () { //... } private void LoadData () { //... } public void SaveData() //llamado desde un checkpoint { //... } public void Create_Load_Game(int profile) //llamado desde menu { //... } } Hasta ahora bien, cada uno por su parte funciona de maravilla. el problema esta en el metodo me parece, que no se en que momento GameData le debe pasar los datos al player, ya que cuando cargo la escena no se si todavia se cargó el Player, y me tira NullReference logico. // // SceneManager.LoadScene (1 , LoadSceneMode.Single); <--- No se si ya se cargó o no Entonces dentro de GameData le invente esto: void Update() { if (loadingData) { print ("loading ..."); if (!Player.GetInstance ()) return; if (!Player.GetInstance ().GetTransform ()) return; if (!Player.GetInstance ().GetTransform ().GetComponent<Player_Skills> ()) return; //En este punto me aseguro que lo player, transform del player y skills existen LoadData (); ResetData (); Game.state = Game.GameState.running; loadingData = false; } } Todavia tengo algunos problemas con algunas cosas que no se cargan bien pero lo demas funciona bastante bien, la pregunta es la siguiente: Existe una forma menos complicada de hacer esto? Ademas el proceso de carga actual funciona asi, pongo todo como estaba y ni bien se cargo lo que quiero lo modifico en el acto, obviamente imperceptible al ojo humano, ahora digamos que aparezco delante de 25 floreros, destruyo 17 floreros, lo guardo. salgo y lo cargo, aparecen los 25 y le restan los 17 en el acto, mmm no me cierra. Lo primero que se me ocurre es en los juegos comerciales que antes de que se cargue todo cada cosa parece estar en su lugar como debe ser y una vez listo aparece la escena, o es un truco sucio que hacen los desarrolladores y en si hacen lo que puse arriba. Saludos y gracias de antemano
  2. Hola, Pues sigo aprendiendo y practicando. Esencialmente me gustaría preguntar si alguien conoce un buen manual o tutorial sobre serialización, especialmente dirigido hacia la parte de listas y referencias a objetos, que es dónde la estoy liando bonita. Me gustaría que fuera más práctico y por conceptos, más que nada para saber cuando y como es coherente serializar, ya que creo que tengo malas costumbres del C++ y estoy dando cosas por supuestas erróneamente. He pegado una vuelta a las ayudas de microsoft y las cosas que salen a bote pronto googleando, pero lo que me sale no profundiza mucho y no me resuelve mis dudas de fondo. Y ya que estoy, aprovecho para preguntar una de mis dudas. Cuando creo un objeto y lo añado con un add a una lista, entiendo que no se crea una copia del objeto a la lista, sino una referencia al objeto original. Alguien puede confirmármelo? Y siguiendo con mis dudas, si no es abusar, planteo el caso que me atormenta ahora mismo. Para que os situéis es un juego de estrategia naval. Creo una clase arma, dónde figuran tiempos de recarga, cadencia de disparo, consumo de munición, alcance máximo etc. Para poner un ejemplo, un antiaeréo de 20mm. Para calcular su impacto, creo otra clase dónde se marca distancia, probabilidad, penetración... Siguiendo con el ejemplo, a 500 metros tiene una probabilidad de un 5% de acertar y atraviesa 20mm de blindaje, a 1000 un 2% y atraviesa sólo 5mm. Esto lo añado al arma con una lista. Después creo una clase torreta, dónde según el tipo de arma podrá tener montajes simples, dobles, triples, cuadruples, sextuples, octuples. Esto tiene sentido sobre todo al pensar en montajes antiareos complejos o en las piezas principales, ya que tienen blindaje, velocidad de rotación y recarga más lentos, pero incrementa las posibilidades de impacto. Más si luego que pensamos que cada torre tendrá una ubicación y la de proa podrá disparar a proa, estribor y babor, pero una pieza en estribor sólo a proa estribor y popa, que una torreta montada más atrasada sobre otra sufrirá una penalización en velocidad de rotación y en efectividad o que una batería secundaria puesta al lado de una mayor sólo podrá abrir fuego defensivo por ejemplo a proa y estribor... Bien, me lío. El caso es que a la clase torreta sólo le añado una referencia al objeto arma, ya que tenga una, dos, tres u ocho piezas, siempre serán del mismo tipo. Hasta aquí bien. Luego creo una clase contenedora (Una mala costumbre del C++, hecho de menos el main) donde creo las tres listas de objetos de armas, puntería y torretas, y asigno a cada arma sus tablas de puntería, y a cada torreta la arma que le corresponde. Y serializo. Y ahí es dónde me lía el pitosfio. Al ver la serialización tengo toda la tabla de puntería, luego toda la tabla de armas y toda la tabla de torretas. Ahora bien, al abrir las armas, veo que también me ha serializado en su interior toda la tabla de puntería. Bueno, eso no es muy grave, podría cargarme la tabla que las agrupa todas las punterías, ya que pensando, resulta redundante. Ahora, el trauma me viene con las torretas, no sólo me guarda la referencia, sino el objeto entero, es decir, el arma y todas las tablas de puntería del arma. Y aquí la primera de mis cuestiones. Entiendo que al deserializar, no me crearía un objeto arma, como tengo en origen, sino un objeto arma por cada tipo de torreta, lo cual es un desperdicio de memoria en objetos duplicados, cuadriplicados e incluso más. Lo ideal sería que existiera un comando que indicara que sólo es una referencia, no un objeto en si (He buscado, pero o no existe o no he sabido encontrarlo). Se me ocurren dos soluciones, a no ser que alguien más experimentado me apunte una tercera. La primera sería serializar sólo las colecciones enteras sin las referencias entre objetos, añadiéndoles un ID y reconstruyendo después las referencias a través por ejemplo de LINQ (Entiendo que Unity lo implementa, una solución muy SQL, lo reconozco). La segunda cambiar la jerarquía y hacer que las torretas dependan del arma (Es decir, una lista en el propio arma) ya que un arma podrá estar montada en diferentes tipos de torretas, en cambio una torreta sólo tendrá una o más armas siempre del mismo tipo, pero como concepto me choca. A vosotros que os parece mejor solución? En fin, que pregunto más cuestiones de concepto que de implementación. Perdón si pregunto burradas, pero es que lo encuentro googleando se centra más en la implementación que en los conceptos, que seguramente es dónde más fallo. Perdón por el tocho y gracias nuevamente a todos.
  3. Hola Mi pregunta es si alguien sabe como se puede guardar(serializar) las variables de los scripts y luego cargarlas, estoy tratando de guardarlas en binario utilizando el BinaryFormatter pero me da error al tratar de guardar un script ya que la clase "MonoBehaviour" no se puede serializar. Alguien puede ayudarme ?
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...