Noticias

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

Problema con instancias y etccc....

Iniciado por KillSound, Septiembre 22, 2016, 11:11:47 AM

Tema anterior - Siguiente tema
Septiembre 22, 2016, 11:11:47 AM Ultima modificación: Septiembre 22, 2016, 11:17:55 AM por KillSound
Nose si estoy preguntando esto en el sitio correcto,soy nuevo y estoy un poco liado con esto.
 
Bueno voy a exponer mi problema. Basicamente lo que quiero saber es si al instanciar un gameobject (clon),si puedo transformar ese clon en un gameobject original en la jerarquia y no sea un clon. Llevo 2 dias echando fuego y no he logrado nada.
 
Y para verlo mas claro explico como seria: en mi juego se instancian y se destruyen coches simulando trafico urbano, entonces lo que quiero es que al montarme en uno de estos coches pase de ser un clon a ser un objeto nuevo de la jerarquia.asi cuando guarde la partida y luego la carge aparecera ese vehiculo .
 
Muchas gracias de antemano...un salu!!!
 
 

Yo tengo el juego Saints Row, y lo que supongo que hacen es tener una pila de coches, un Object Pool, circulando por el escenario, y cuando robas uno de ellos la IA deja de conducirlo mientras lo conduces, pero el coche no es tuyo hasta que lo llevas al garaje.
 
Cuando lo entras al garaje, supongo que crearan un duplicado y lo añadirán a tu lista de coches favoritos, y el coche que robaste volverá a la pila/Object Pool del juego controlado por la IA.

Instanciar un GameObject sólo supone recrear una copia en tiempo de ejecución (durante el Play) de un prefab, con sus atributos por defecto. Una vez allí, es un objeto más en el juego y puedes hacer con él lo que quieras, incluso cambiarle de jerarquía.
 
Pongamos que tienes un coche(Clone), que es una instancia de un prefab, y lo tienes dentro de una jerarquía de objetos de la calle, por ejemplo así:
 



   
      Calle
           coche(clone)
           coche(clone)
           coche(clone2) // <--- ¡Queremos este coche!
           ...      
   

[/quote]
 
Y en cuanto pillas ese coche, y recuperas su GameObject, lo que quieres es quitar de la jerarquía Calle, y ponerlo en tu jerarquía de Player, por ejemplo...
 



   
      miCoche.transform.parent = miPlayer;   // O algo parecido...
   

[/quote]
 
Ahora miCoche pasa a formar parte de lo que haya dentro de miPlayer. Por ejemplo...
 



   
      Player
           Camara
           PlayerManager     coche(clone2)  //<--- Nuestro coche.
           Character
           Weapons
                 Pistola
   

[/quote]
 
 
 
Ahora bien, para todo el tema de cargar/guardar partida, etc, ya te va a tocar programar algún script que registre y mantenga items en un inventario, etc, y tenga la referencia a ese coche.
 
Pero eso ya es otra cuestión distinta a lo que preguntas...

Muchas gracias a los dos, casi dais en el clavo, de echo Kaito los coches instanciados son conducidos por IA con sus waypoint para que sigan una ruta, si los vehículos se alejan del personaje se destruyen y si me monto en un vehiculo de estos, la IA que lo controla se desactiva y se activa mi control, y el coche ya no se destruira aunque te alejes de el, es como si le quitaras el antirrobo y mientras estes en el juego el coche estara ahi para ti. Podria hacer lo que comentas de tener los coche sin instanciar en la jerarquia, sino ya creados dando vueltas, pero por tema de optimización de rendimiento lo hago con instancias y asi cuando la vista del personaje se pierde no habra ningun coche consumiendo recursos, y siempre habra coches a la vista simulando trafico. Ahora bien Pioj de echo los coches que se instancian pasan a un gameObject vacio padre para que se queden en el mismo gameobject y queden ordenados, pero aun asi siguen siendo clones. Para guardar utilizo el playerpref y guardo la posicion del jugador, el dinero, nivel y poco mas. Cual fue mi sorpresa ,,,hice una prueba que consistia en que cada vez que se instanciara un vehiculo se creara un gameobject vacio (ej: var Coche:new GameObject(); en el momento de instanciar) y así instancia el vehiculo y aparte crea un gameobject vacio, pues cuando guardo la partida y la vuelvo a cargar los vehiculos instanciados (clones) no estan, pero si estan los gameobject vacios. Por lo visto playerpref ademas de guardar int, float y string también guarda la jerarquia de gameobjects actual si no son clones. De ahi mi idea de si pudiera pasar los clones a gameobject (no clones) entonces si podria conservar el coche cuando carge mi partida. XDXDXD
 
Mis soluciones serian:
 
- Poder pasar los clones a gameobject reales del juego de alguna manera con código (Ej : pulso un boton y el clon pase a ser un gameobject real).
 
- Poder duplicar mediante código el coche pero sin instanciar, mas bien como copiar y pegar de la jerarquía.
 
- También cuando instancie crear un gameobject nuevo con toda la información del clon (hijos ,componentes ,etc).  
 
Gracias por todo.... 

Rectifico: PlayerPref no guarda la jerarquía de objetos creados ni los clones, ayer cuando hice la prueba me confundí y lo que pasaba es que al cargar la partida se creaba el gameobject vacío porque estaba guardando la partida dentro del trigger que creaba el gameobject, entonces al cargarla como estaba dentro del triger se volvía a crear.Creo que ya solo me queda guardar la partida serializando para que se guarde todo hasta los clones.un saludo!!!  

Etiquetas: