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

140
Vistas
Incremento en bucle o sentencia if

Así que aquí está la cosa. Tengo un juego en el que tengo un generador: para generar obstáculos. Y quiero después de cada 5 obstáculos para aumentar la velocidad. Ejemplo: los obstáculos 1, 2, 3, 4, 5 tienen una velocidad predeterminada = 5 y quiero que los obstáculos 6, 7, 8, 9, 10 tengan una velocidad aumentada a velocidad = 10, etc. Ya tengo algunas declaraciones if anidadas, pero Quiero aumentar la velocidad infinitamente, por ejemplo, para tener una velocidad = 1000 para el obstáculo número 100. Aquí está mi código:

 IEnumerator SpawnObstacles() { int i = 0; do { var randomTime = Random.Range(minTime, maxTime); var randomObstacle = Random.Range(0, obstacles.Length); yield return new WaitForSeconds(randomTime); var obstacle = Instantiate(obstacles[randomObstacle], transform.position, Quaternion.identity); Destroy(obstacle, 10f); i++; if(i >= 10) { IncreaseSpeed(); if(i >= 20) { IncreaseSpeed(); if(i >= 30) { IncreaseSpeed(); } } } } while (true); } private void IncreaseSpeed() { Obstacle obs = FindObjectOfType<Obstacle>(); obs.speed += 5f; }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El operador de módulo % ayuda con cosas como esta. Da el resto de la operación de división, por ejemplo:

 3%5 is 3 4%5 is 4 5%5 is 0 6%5 is 1 7%5 is 2 8%5 is 3 9%5 is 4 10%5 is 0

Entonces, si su x comienza en 0 y desea aumentar la velocidad cada 5, solo mire cada vez que el módulo sea 4.

x puede ir tan alto como quieras (bueno, int.MaxValue) pero el módulo siempre será 0..4:

 //do some stuff //should we increase speed? if(x % 5 == 4) IncreaseSpeed();

También es una herramienta útil para crear matrices circulares... someArray[i % someArray.Length] nunca se saldrá de los límites, porque el resultado de un módulo siempre está entre 0 y uno menos que la longitud

over 4 years ago · Santiago Trujillo Denunciar

0

Lo que podrías hacer en su lugar es:

  • Realice un seguimiento de cuántas instancias de obstáculos ha generado hasta ahora usando una variable (tal vez una variable estática https://www.c-sharpcorner.com/UploadFile/1ce252/static-variables-and-static-methods-in-C -Sharp/ ) y asegúrese de simplemente aumentar la velocidad cada 5 instancias usando el módulo % . Puede consultar más información aquí: https://blog.mattclemente.com/2019/07/12/modulus-operator-modulo-operation.html

Una introducción rápida a Modulos:

 //It essentially shows the rest of a division 5 / 5 == 1 //Since there's no rest there, 5 % 5 == 0 //But in the case of where there is a rest 6 / 5 == 1 (Rest 1) //Hence 6 % 5 == 1 //Other examples : 7 % 5 == 2 8 % 5 == 3 9 % 5 == 4 10 % 5 == 0 //!! The result is back to zero here as 10/5 == 2 with no Rest
  • Implemente una función recursiva que esté en el Objeto que se genera en otro objeto con los mismos atributos, pero pase un parámetro que indique cuántas instancias se han generado hasta el momento y verifique si es la quinta instancia, si es así, agréguele velocidad.
over 4 years ago · Santiago Trujillo Denunciar

0

Tienes un Coroutine en un bucle infinito de todos modos ... ¿por qué no simplemente hacer

 IEnumerator SpawnObstacles() { do { for(var x = 0; x < 5; x++) { var randomTime = Random.Range(minTime, maxTime); var randomObstacle = Random.Range(0, obstacles.Length); yield return new WaitForSeconds(randomTime); var obstacle = Instantiate(obstacles[randomObstacle], transform.position, Quaternion.identity); Destroy(obstacle, 10f); } // These lines are automatically reached after every 5 iterations // no need for any módulo or other magic check Obstacle obs = FindObjectOfType<Obstacle>(); obs.speed += 5f; } while (true); }

O como no estoy seguro de todo este asunto de FindObjectWithTag ... en realidad me parece que es el mismo objeto que instanciaste, ¿verdad? Entonces, ¿por qué no simplemente

 IEnumerator SpawnObstacles() { var speed = 5; do { for(var x = 0; x < 5; x++) { var randomTime = Random.Range(minTime, maxTime); var randomObstacle = Random.Range(0, obstacles.Length); yield return new WaitForSeconds(randomTime); var obstacle = Instantiate(obstacles[randomObstacle], transform.position, Quaternion.identity); obstacle.GetComponent<Obstacle>().speed = speed; Destroy(obstacle, 10f); } // These lines are automatically reached after every 5 iterations // no need for any módulo or other magic check speed += 5f; } while (true); }

Aunque para mí no está claro cómo crecerá exactamente tu velocidad. Según su descripción, parece que desea agregar 5 después de cada grupo de iteraciones ... sin embargo, esto significaría que tiene velocidad = 100 (20 * 5) para el objeto número 100 ... no velocidad = 1000 como escribió

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