Menu
CoddyTech

Tu primera corrutina

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 23 de 63.

Update() debe terminar en cada fotograma, así que no puede esperar. Una corutina sí puede: es un método que se pausa y continúa más tarde, justo donde se detuvo. Devuelve IEnumerator, que requiere using System.Collections;, y cada yield return dentro de ella es una pausa. En C#, yield return crea un método que entrega sus valores de uno en uno; Unity solicita el siguiente cuando termina la espera. yield return null espera un fotograma, y yield return new WaitForSeconds(3f) espera 3 segundos.

StartCoroutine(Cycle()) inicia una. Este semáforo se pone verde, amarillo 3 segundos después y rojo tras un segundo más:

using System.Collections;
using UnityEngine;

public class TrafficLight : MonoBehaviour
{
    Renderer lamp;

    void Start()
    {
        lamp = GetComponent<Renderer>();
        StartCoroutine(Cycle());
    }

    IEnumerator Cycle()
    {
        lamp.material.color = Color.green;
        yield return new WaitForSeconds(3f);
        lamp.material.color = Color.yellow;
        yield return new WaitForSeconds(1f);
        lamp.material.color = Color.red;
    }
}

StartCoroutine ejecuta la corutina hasta su primer yield de inmediato, y luego Start() continúa; Unity la reanuda después de cada espera, con sus variables locales tal como estaban. Una llamada aislada a Cycle(); sin StartCoroutine no hace nada: crea el método pausado y lo descarta, y no se ejecuta ni una línea. Y yield return 3f; no es una espera de 3 segundos: Unity solo reconoce objetos de espera como WaitForSeconds y trata cualquier otro valor como un fotograma.

challenge icon

Desafío

Fácil

Los Spikes esperan debajo del suelo. Haz que Space active la trampa con una corrutina llamada Spring:

  • De inmediato: registra Click.
  • Medio segundo después: los pinchos saltan 1 unidad hacia arriba.
  • 2 segundos después: vuelven a bajar 1 unidad.

Presiona Play, presiona Space y observa; después, Check.

Pruébalo tú mismo

using System.Collections;
using UnityEngine;

public class SpikeTrap : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Activa la trampa con una corrutina
        }
    }

    // IEnumerator Spring(): Haz clic, espera 0.5 s, sube 1 unidad, espera 2 s, baja 1 unidad
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad