Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

279
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda