Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

143
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!