Menu
CoddyTech

הקורוטינה הראשונה שלך

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

‏Update() חייבת להסתיים בכל פריים, ולכן היא לא יכולה להמתין. קורוטינה יכולה: זו מתודה שמשהה את פעולתה וממשיכה מאוחר יותר בדיוק מהמקום שבו נעצרה. היא מחזירה IEnumerator, שדורש את using System.Collections;, וכל yield return בתוכה הוא השהיה. ב־C#, yield return יוצרת מתודה שמוסרת את הערכים שלה אחד בכל פעם; Unity מבקשת את הערך הבא כשההמתנה מסתיימת. yield return null ממתין פריים אחד, ו־yield return new WaitForSeconds(3f) ממתין 3 שניות.

StartCoroutine(Cycle()) מפעילה קורוטינה. רמזור זה נדלק בירוק, עובר לצהוב כעבור 3 שניות, ולאדום אחרי שנייה נוספת:

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 מריצה את הקורוטינה עד ל־yield הראשון שלה מיד, ואז Start() ממשיכה; Unity ממשיכה להריץ אותה אחרי כל המתנה, כשהמשתנים המקומיים שלה נשארים כפי שהיו. קריאה ל־Cycle(); לבדה, ללא StartCoroutine, לא עושה דבר: היא יוצרת את המתודה המושהית ומשליכה אותה, ואף שורה ממנה לא רצה. ו־yield return 3f; אינה המתנה של 3 שניות: Unity מכירה רק אובייקטים של המתנה, כגון WaitForSeconds, ומתייחסת לכל ערך אחר כאילו מדובר בפריים אחד.

challenge icon

אתגר

קל

הקוצים ממתינים מתחת לרצפה. גרום ל־Space להפעיל את המלכודת באמצעות קורוטינה בשם Spring:

  • מיד: תעד Click.
  • חצי שנייה לאחר מכן: הקוצים קופצים למעלה ביחידה אחת.
  • 2 שניות לאחר מכן: הם שוקעים בחזרה למטה ביחידה אחת.

לחץ על הפעלה, לחץ על Space וצפה, ואז לחץ על בדיקה.

נסו בעצמכם

using System.Collections;
using UnityEngine;

public class SpikeTrap : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // הפעל את המלכודת באמצעות קורוטינה
        }
    }

    // IEnumerator Spring(): לחיצה, המתנה של 0.5 s, עלייה של 1 יחידה, המתנה של 2 s, ירידה של 1 יחידה
}
quiz iconבחנו את עצמכם

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

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