Noticias

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

No cambia la velocidad de InvokeRepeating

Iniciado por juanito12, Septiembre 04, 2018, 10:15:23 PM

Tema anterior - Siguiente tema
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!!

Septiembre 04, 2018, 10:40:05 PM #1 Ultima modificación: Septiembre 04, 2018, 10:40:37 PM por lightbug
Estás disparándolo solo una vez no?, no me digas que lo tenés en Update.

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!

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

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
   


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..

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.


Etiquetas: