Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: juanito12 en Septiembre 04, 2018, 10:15:23 PM

Título: No cambia la velocidad de InvokeRepeating
Publicado por: juanito12 en Septiembre 04, 2018, 10:15:23 PM
Hola comunidad, como están? Estoy practicando con Unity y al querer crear enemigos desde un prefab con el metodo InvokeRepeating, me crea muchisimos en 1 segundo y asi infinitamente. Los parametros son estos verdad? InvokeRepeating("CreateEnemy" (<-- Aca llamo la funcion que lo crea), 0f, 10f). El 0f es cuanto tarda en hacerlo la primera vez y el 10f seria cada cuanto lo repite, no? Muchas gracias, saludos!!
Título: No cambia la velocidad de InvokeRepeating
Publicado por: lightbug en Septiembre 04, 2018, 10:40:05 PM
Estás disparándolo solo una vez no?, no me digas que lo tenés en Update.
Título: No cambia la velocidad de InvokeRepeating
Publicado por: juanito12 en Septiembre 04, 2018, 11:29:25 PM
Cita de: lightbug date=1536093605Estás disparándolo solo una vez no?, no me digas que lo tenés en Update.
   


Hola lightbug, efectivamente lo tengo en update!! Pero me lo dispara millon de veces, si lo pongo en start solo al principio! El tema es que en el video que estaba viendo lo tiene en update y se lo dispara cada 1.75f. No se porque el mio lo hace inifinitas veces por segundo!
Título: No cambia la velocidad de InvokeRepeating
Publicado por: juanma_teso en Septiembre 05, 2018, 12:59:48 AM
El compañero ha dado en el clavo, si lo tienes en Update se llama cada frame, es decir cada frame le dices a Unity; oye llama esta función en 0 segundos y cada 10 segundos otra vez, el siguiente frame le dices de nuevo; llama esta función en 0 segundos y cada 10 segundos otra vez, tienes que tener cuidado con cuántas veces llamas las funciones, sobre todo cuando estés en el Update, sácalo del Update o prueba con:
 
https://docs.unity3d.com/ScriptReference/MonoBehaviour.IsInvoking.html (https://docs.unity3d.com/ScriptReference/MonoBehaviour.IsInvoking.html)
Título: No cambia la velocidad de InvokeRepeating
Publicado por: juanito12 en Septiembre 05, 2018, 05:08:04 AM
Cita de: juanma_teso date=1536101988El compañero ha dado en el clavo, si lo tienes en Update se llama cada frame, es decir cada frame le dices a Unity; oye llama esta función en 0 segundos y cada 10 segundos otra vez, el siguiente frame le dices de nuevo; llama esta función en 0 segundos y cada 10 segundos otra vez, tienes que tener cuidado con cuántas veces llamas las funciones, sobre todo cuando estés en el Update, sácalo del Update o prueba con:
   
   
      https://docs.unity3d.com/ScriptReference/MonoBehaviour.IsInvoking.html (https://docs.unity3d.com/ScriptReference/MonoBehaviour.IsInvoking.html)
   


Hice eso que dice ahi, pero le puse el InvokeRepeating dentro de un if con la condicion de que una variable GameState este en modo playing (antes de presionar start esta en modo parado). Luego de que presiono start, empieza a generar los enemigos y los genera cada 1.75f como le puse. Sigue estando en update el invokerepeating pero ahora esta dentro del if ese, la verdad no se en que cambia y porque ahora si respeta los tiempos. Probare con el invoke que me pasaste! Mucha gracias, les contare en breve..
Título: No cambia la velocidad de InvokeRepeating
Publicado por: pioj en Septiembre 05, 2018, 09:40:17 AM
Te voy a dar un par de consejos básicos:
 

  1.    Nunca pongas un InvokeRepeating dentro un Update().


  2.    ¡NUNCA pongas un InvokeRepeating dentro de un Update()!


  3.    En lugar de hacer eso, puedes controlar con Eventos cuándo debe aparecer un enemigo, etc...


  4.    Otra técnica mucho mejor es la del "Object Pool" : Tienes al principio una cantidad determinada fija de enemigos creados, pero ocultos en pantalla, y cuando "deben crearse", simplemente los reposicionas dónde toquen y activas sus scripts de lógica.