es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Rendimiento de las Corrutinas de Unity

Usé Coroutine en Unity bastante en mis proyectos, son útiles porque me permiten retrasar funciones o hacer cosas cada X segundos.

Ahora sé cómo usarlos, pero realmente no sé qué está sucediendo en segundo plano y me pregunto cuál es su impacto en el rendimiento. ¿Las corrutinas son lentas/rápidas?

Por ejemplo, hacer cosas cada pocos segundos se puede hacer en la función Update, pero también se puede hacer en una corrutina con ‘WaitForSeconds’ o con ‘yield return null’. ¿Son todos igual de eficientes?
Escribí diferentes formas aquí, que según la teoría deberían funcionar. Pero, ¿cuáles son las mejores? Si son todas iguales, ‘WaitForSeconds’ parece más fácil de leer y podría preferirla.

Forma en ‘Update’

private float shootInterval = 5f;
private float counterDeltaTime = 0f;
private void Update() {
    counterDeltaTime += Time.deltaTime;

    if (counterDeltaTime >= shootInterval) {
        Shoot();
        counterDeltaTime = 0;
    }
}

Forma en ‘Coroutine’

private void Start() {
    StartCoroutine(ShootEvery(5f));
}
private IEnumerator ShootEvery(float seconds) {
    yield return new WaitForSeconds(seconds);
    Shoot();
    StartCoroutine(ShootEvery(seconds));
}

private void Start() {
    StartCoroutine(ShootEvery(5f));
}
private IEnumerator ShootEvery(float seconds) {
    float dt = 0;
    while (dt < seconds) {
        yield return null;
        dt += Time.deltaTime;
    }
    Shoot();
    StartCoroutine(ShootEvery(5f));
}

Gracias por las respuestas.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Las rutinas de flujo en Unity son una herramienta útil para retrasar funciones o ejecutar código en intervalos específicos. La eficiencia de las rutinas de flujo depende de la implementación, ya que existen diferentes formas de lograr el mismo resultado.

    En términos de rendimiento, la función Update se llama en cada frame, lo que significa que usarla para ejecución retrasada puede ser menos eficiente que las rutinas de flujo, ya que no tiene en cuenta el intervalo deseado.

    Cuando se trata de usar rutinas de flujo, la diferencia en eficiencia entre usar WaitForSeconds y yield return null es mínima. WaitForSeconds es más fácil de leer y escribir, lo que lo convierte en una buena elección para la mayoría de los casos.

    En el ejemplo proporcionado, los tres métodos son opciones viables y eficientes. Sin embargo, el uso de rutinas de flujo con WaitForSeconds puede ser el más legible y fácil de mantener.

    En general, las rutinas de flujo son una herramienta comúnmente utilizada en Unity, y los problemas de rendimiento suelen ser causados ​​por una implementación deficiente en lugar de la ineficiencia inherente de las rutinas de flujo.

Comments are closed.