Menu
CoddyTech

לולאות בקורוטינות

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 24 מתוך 63.

לולאה עם yield return בתוכה פועלת לאורך פריימים רבים, כי כל איטרציה מושהית לפני הבאה. בעזרת WaitForSeconds הלולאה חוזרת על פעולה בקצב קבוע. הסירנה הזאת מהבהבת 3 פעמים:

IEnumerator Flash()
{
    for (int i = 0; i < 3; i++)
    {
        lamp.enabled = true;
        yield return new WaitForSeconds(0.2f);
        lamp.enabled = false;
        yield return new WaitForSeconds(0.2f);
    }
}

עם yield return null הלולאה עושה קצת בכל פריים עד שהתנאי שלה מתקיים, וכך קורוטינה מנפישה משהו. הבלון הזה, שקנה המידה שלו הוא 1, גדל ב-0.5 לשנייה עד שקנה המידה שלו מגיע ל-2, ואז מדווח:

IEnumerator Inflate()
{
    while (transform.localScale.x < 2f)
    {
        transform.localScale += Vector3.one * 0.5f * Time.deltaTime;
        yield return null;
    }
    Debug.Log("Full");
}

Time.deltaTime פועל כאן כמו ב-Update(): הקורוטינה ממשיכה פעם אחת בכל פריים, והשורה שאחרי הלולאה רצה רק כשהלולאה מסתיימת. בלי yield, כל הלולאה רצה בתוך פריים אחד והבלון מתמלא מיד. לולאת while (true) מתאימה בקורוטינה כל עוד היא מוותרת על השליטה בכל איטרציה; בלי yield היא לא תחזיר את השליטה לפריים, ועורך Unity יקפא.

challenge icon

אתגר

קל

המקש Space מפעיל את הקורוטינה Ride של שער הטירה Portcullis. כתוב את Ride כך שהשער יבצע מסלול מלא אחד:

  • הוא עולה height (3) יחידות במהירות speed (1.5) יחידות לשנייה, נעצר בדיוק בחלק העליון ומתעד Open.
  • הוא נשאר פתוח למשך שנייה אחת.
  • הוא יורד בחזרה באותה מהירות למקום שבו התחיל (down) ומתעד Closed.

לחץ על Play ולחץ על Space, ואז על Check.

נסו בעצמכם

using System.Collections;
using UnityEngine;

public class Portcullis : MonoBehaviour
{
    public float speed = 1.5f;
    public float height = 3f;
    Vector3 down;

    void Start()
    {
        down = transform.position;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartCoroutine(Ride());
        }
    }

    IEnumerator Ride()
    {
        // עלה height יחידות במהירות speed ורשום ביומן Open, הישאר למשך 1 שנייה, רד בחזרה ורשום ביומן Closed
        yield return null;
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה פיזיקה ומשחקיות