Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

283
Vistas
Unidad: la función se comporta de forma inesperada dentro de una corrutina

la función se ve así:

 private void Shrink(Animation anim) { AnimationClip clip = new AnimationClip(); clip.legacy = true; char[] c = { 'x', 'y', 'z' }; float rot = Random.value * 360 - 180; Vector3 toPosition = transform.position + (Random.value * radius * 5 / 6 + radius / 6) * new Vector3(Mathf.Cos(rot), Mathf.Sin(rot)); float scaleMul = Random.value / 4 + 1.0f / 2.0f; float duration = (transform.position - toPosition).magnitude / speed; for (int i = 0; i < 3; i++) { Keyframe[] keys; keys = new Keyframe[2]; keys[0] = new Keyframe(0.0f, transform.position[i]); keys[1] = new Keyframe(duration, toPosition[i]); curve = new AnimationCurve(keys); clip.SetCurve("", typeof(Transform), "localPosition." + c[i], curve); } for (int i = 0; i < 3; i++) { Keyframe[] keys; keys = new Keyframe[2]; keys[0] = new Keyframe(0.0f, transform.localScale[i]); keys[1] = new Keyframe(duration, transform.localScale[i] * scaleMul); curve = new AnimationCurve(keys); clip.SetCurve("", typeof(Transform), "localScale." + c[i], curve); } // now animate the GameObject anim.AddClip(clip, clip.name); anim.Play(clip.name); }

todo lo que hace es animar la reducción de un borde y moverlo a una ubicación aleatoria dentro de un radio. la función funciona bien si la llamo sola, pero quiero que la función se llame cada x segundos, así que escribí esta rutina:

 IEnumerator ShrinkCR(float time) { for (int i = 0; i < 3; i++) { yield return new WaitForSeconds(time); Shrink(anim); } }

y simplemente lo llamó dentro de update():

 private void Update() { StartCoroutine(ShrinkCR(10)); }

pero cuando hago eso, el borde se vuelve loco y, en cambio, va a una ubicación aleatoria dentro de un radio, simplemente acelera hacia la derecha indefinidamente. ¿¿¿¿Qué hice mal????

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La Update se llama cada cuadro, por lo que está iniciando la rutina 60 veces por segundo aproximadamente. Es por eso que estás teniendo ese comportamiento. Llámalo una vez donde y cuando lo necesites, no en la actualización.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda