Noticias

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

[APORTE] Object Pool

Iniciado por Ilie, Enero 06, 2014, 06:57:20 AM

Tema anterior - Siguiente tema
Lo único que tengo en claro de los scripts es como añadir el pool manager a un objeto y como añadir grupos de objetos en cada pool
Me falta aprender a decirle cuando ir activando cada elemento y en que posición

Cita de: mrpacogp date=1396855662Lo único que tengo en claro de los scripts es como añadir el pool manager a un objeto y como añadir grupos de objetos en cada pool
Me falta aprender a decirle cuando ir activando cada elemento y en que posición
 
Lo básico que tienes que entender, es que tienes que crear un numero determinado de objetos de cada clase los cuales vas a activar/desactivar cuando se requiera. @Ilie está creando un ejemplo de pool muy completo y pienso que no apto para novatos que no han entendido el concepto.
 
Olvídate de que vas a crear un pool o un chalet adosado u otra cosa XDDD. Concéntrate en que tienes que instanciar al inicio de tu escena un numero de elementos, los cuales vas a activar desactivar en una posición y rotación determinada y que luego vas a desactivar cuando no los necesites.  El pool más sencillo lo puedes hacer con 2 scripts,  uno se encarga de instanciar y de activar/desactivar los objetos cuando sean necesarios y el otro lo lleva cada objeto, y se encarga de resetear el objeto. 

FNK Games  Games Developer  -  Juegos realizados en Unity para iOS y Android



Si, eso lo estoy probando y mas o menos lo tengo claro.
El tema es, que yo lo tenía previsto usar, para ir instanciando futuros niveles en mi juego jump2sky.
Es decir, carga el juego y carga los tipos de enemigos en una zona fuera de camara, y los tipos de plataforma, y luego según el nivel donde estoy cargo los dos siguientes y muevo a su posición los objetos que necesito.
Este sería el concepto no?
Pero con los scripts estos estoy jugando y probando el pool manager pero claro no puedo controlar donde y cuando se instancia. Sigo estudiandolos xD

Según he visto y probado, en tu juego no es necesario usar un Object pool. Las plataformas que tienes, como dices, forman parte de un atlas y son estáticas. O sea, que tienen el mismo material el cual es batcheado. Y de no ser así podrías combinar los objetos estáticos en un solo draw call.  Tampoco he visto enemigos, y si los hubiera, no es un juego tipo survival donde los enemigos no paran de salir.  No veo que tu juego necesite un Object Pool sinceramente.

FNK Games  Games Developer  -  Juegos realizados en Unity para iOS y Android



Abril 07, 2014, 10:02:15 AM #19 Ultima modificación: Abril 07, 2014, 10:03:48 AM por mrpacogp
Ya, eso estoy pensando, que esto es util para miles de balas y similar
El caso es que no se que hago mal para tener tantos drawcalls.
Yo creo un prefab con un sprite de plataforma, y esse mismo lo uso para crear los niveles, pero al hacerlo... bueno viste la imagen no?
Algo no estoy haciendo bien desde luego.
Lo del mismo material para ser bacheado lo imagino pero no se si debo hacer algo mas.
Si hago el grupo de static sprite batcher pierdo los colider de las plataformas....

Abril 07, 2014, 02:12:08 PM #20 Ultima modificación: Abril 07, 2014, 02:12:53 PM por Ilie
La verdad es que la idea era hacer un pool completo pero sencillo lo malo es que ha ido creciendo y tiene de sencillo lo que yo de rubia explosiva, pero el manejo, que al final es de lo que se trata continua siendo hiper sencillo creas pools en el inspector, instancias con los spawn, y reciclas con recycle, en cuanto pueda preparare una doc muy básica... El tema de grupos ya es un poco más complejillo...


   Pain-T: A free FPS browser game




   http://www.paintemall.com




   




   Hilo en unity3d.com



Abril 27, 2014, 03:16:38 PM #21 Ultima modificación: Abril 27, 2014, 03:17:30 PM por Ilie
He subido una nueva actualizacion con algunos fixes y mejoras y el codigo un poco mas comentado.
 
Descaga en: https://github.com/euriarte/Unity-Simple-Pool" rel="external nofollow">https://github.com/euriarte/Unity-Simple-Pool
 
PD: a quienes correspoda, gracias por el feedback


   Pain-T: A free FPS browser game




   http://www.paintemall.com




   




   Hilo en unity3d.com



Estas cosas si no es con un ejemplo a mi a veces no me entra
Enviado desde mi SM-N9005 mediante Tapatalk

@Ilie como mierdas se usa esto? xDDDD, demasiado complicado para mi cerebro lleno de marihuana y coca xDDD, he visto documentación y me lo he descargado y mirado pero es que C# sinceramente no me entero de nada.. D:

Mayo 01, 2014, 10:29:58 PM #24 Ultima modificación: Mayo 01, 2014, 10:31:50 PM por Ilie
Es el dia del Trabajo, ***azo!,
 
la cosa es sencilla, como manejarlo en 5 lineas
 
añadir el componenete PoolManager a un objeto
arrastrar los prefabs para los que quieras crear un pool al cuadro pools (el sistema ya se encarga de añadir los componentes necesarios a los objetos etc)
puedes abrir cada pool creado y configurarlo manualmente, numero maximo de instancias, reproducir audios y o sistemas de particuas, cual tiene que ser su padre....
 
Uso simple del api:

PoolItem PoolManager.Spawn()// Spawnea un elemento,hay varias sobrecargas, por nombre o por objeto, por objeto hay que marcar dynamicpool para que los indexe
PoolManager.RecyclePool("NombrePool");//Recicla todos los objetos del pool "NombrePool";
PoolManager.RecycleAll()//Recicla todos los objetos
PoolItem.Reparent()// modifica el padre del objeto instanciado
PoolItem.Recycle()// recicla el objeto.

Luego tiene un monton de opciones de grupos y cosas un poco mas raras pero con esas 5 funciones y sus sobrecargas deberias poder usarlo sin mayor problema.
 
He intentado que la programacion sea lo mas simple posible y el sistema bastante cerrado vamos que no haga falta andar con temas internos, entre las clases PoolManager y PoolItem deberias poder hacer cualquier cosa sin tener que tocar nada mas.
 
Hay tambien un ejemplo de como extender la clase PoolItem para darle mas funcionalidades, el ejemplo es un poco tonto... pero bueno es lo que se me ocurrio en aque momento....
 
Al final han sido mas de 5 lineas....


   Pain-T: A free FPS browser game




   http://www.paintemall.com




   




   Hilo en unity3d.com



Cita de: Ilie date=1398976198Es el dia del Trabajo, ***azo!,
 
la cosa es sencilla, como manejarlo en 5 lineas
 
añadir el componenete PoolManager a un objeto
arrastrar los prefabs para los que quieras crear un pool al cuadro pools (el sistema ya se encarga de añadir los componentes necesarios a los objetos etc)
puedes abrir cada pool creado y configurarlo manualmente, numero maximo de instancias, reproducir audios y o sistemas de particuas, cual tiene que ser su padre....
 
Uso simple del api:

PoolItem PoolManager.Spawn()// Spawnea un elemento,hay varias sobrecargas, por nombre o por objeto, por objeto hay que marcar dynamicpool para que los indexe
PoolManager.RecyclePool("NombrePool");//Recicla todos los objetos del pool "NombrePool";
PoolManager.RecycleAll()//Recicla todos los objetos
PoolItem.Reparent()// modifica el padre del objeto instanciado
PoolItem.Recycle()// recicla el objeto.

Luego tiene un monton de opciones de grupos y cosas un poco mas raras pero con esas 5 funciones y sus sobrecargas deberias poder usarlo sin mayor problema.
 
He intentado que la programacion sea lo mas simple posible y el sistema bastante cerrado vamos que no haga falta andar con temas internos, entre las clases PoolManager y PoolItem deberias poder hacer cualquier cosa sin tener que tocar nada mas.
 
Hay tambien un ejemplo de como extender la clase PoolItem para darle mas funcionalidades, el ejemplo es un poco tonto... pero bueno es lo que se me ocurrio en aque momento....
 
Al final han sido mas de 5 lineas....
Osea para llamar a un prefab previamente arrastrado al pool, utilizo esta funcion: PoolItem PoolManager.Spawn() ¿no? Y en unityscript como se utilizaria? igual? Y eso de reciclar para que sirve exactamente? Muchisimas gracias!
 
 
P.D:
Cita de: Ilie date=1398976198Es el dia del Trabajo, ***azo!,
 
Joer mil perdones xDDD

xDDD
 
Basicamente si, la cosa es que añado un pool llamado Bala
 
para instanciarlo haces PoolManager.Spawn("Bala",posicion,rotacion);
o
PoolManager.Spawn("Bala",posicion);
o
PoolManager.Spawn("Bala",transform);
o
PoolManager.Spawn("Bala"); esto lo instanciaria con la posicion y rotacion del prefab.
 
todas ellas te devuelven el PoolItem del objeto activado
 
si quieres usar un prefab en vez de un nombre puedes hacerlo mediante
PoolManager.Spawn(GameObject,posicion,rotacion); etc y te lo indexaria, crearia el pool y lo iria poblando de ser necesario


   Pain-T: A free FPS browser game




   http://www.paintemall.com




   




   Hilo en unity3d.com



Mayo 01, 2014, 11:15:18 PM #27 Ultima modificación: Mayo 01, 2014, 11:15:33 PM por thexicotet94
Cita de: Ilie date=1398978820xDDD
 
Basicamente si, la cosa es que añado un pool llamado Bala
 
para instanciarlo haces PoolManager.Spawn("Bala",posicion,rotacion);
o
PoolManager.Spawn("Bala",posicion);
o
PoolManager.Spawn("Bala",transform);
o
PoolManager.Spawn("Bala"); esto lo instanciaria con la posicion y rotacion del prefab.
 
todas ellas te devuelven el PoolItem del objeto activado
 
si quieres usar un prefab en vez de un nombre puedes hacerlo mediante
PoolManager.Spawn(GameObject,posicion,rotacion); etc y te lo indexaria, crearia el pool y lo iria poblando de ser necesario
Joer menuda maravilla xDDDD asi da gusto jajaja

Mayo 01, 2014, 11:20:13 PM #28 Ultima modificación: Mayo 01, 2014, 11:22:14 PM por Ilie
Perdona que se me pasaba
para usaro con unityscript creo que es suficiente con guardar los scripts dentro de las carpetas "Standard Assets" o "Plugins" y asi se compilaran antes y seran accesibles por cualquier script que este fuera de dichas carpetas esten en el lenguaje que esten.
 
el recycle equivale al destroy, de hecho deberia sustituirlo


   Pain-T: A free FPS browser game




   http://www.paintemall.com




   




   Hilo en unity3d.com



¡Pedazo de curro que te estás pegando iIle! (y una maravilla tener un pool gratuito para Unity).
Yo no lo he probado porque compré hace ya tiempo el ObjectPool de la Asset Store que es carillo pero va de lujo, pero seguro que muchísima gente va a tirar de esta utilidad. Es un aporte acojonante. Da gusto leer hilos como éste con tantos updates y cosillas que vas metiendo.
 
Mis más sinceras felicitaciones por el curro que te estás pegando para la comunidad.

Etiquetas: