Menu
CoddyTech

הפעלה חוזרת, ביטול הפעלה

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

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) קוראת ל־Blink בפעם הראשונה אחרי 0.5 שניות, ואז שוב בכל 0.5 שניות, עד לביטולה. המספר הראשון הוא ההשהיה לפני הקריאה הראשונה, והשני הוא הזמן שבין הקריאות. CancelInvoke(nameof(Blink)) עוצרת אותה, ו־CancelInvoke() ללא שם עוצרת כל קריאת Invoke שהסקריפט תזמן.

נורת האזהרה הזו מהבהבת עד שלוחצים על Space, ואז נשארת דולקת:

Light lamp;

void Start()
{
    lamp = GetComponent<Light>();
    InvokeRepeating(nameof(Blink), 0.5f, 0.5f);
}

void Blink()
{
    lamp.enabled = !lamp.enabled;
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        CancelInvoke(nameof(Blink));
        lamp.enabled = true;
    }
}

הטיימר מפרק ההופעה היה עושה את אותה עבודה בעזרת שדה float ובדיקה בתוך Update(). עם InvokeRepeating, Unity מנהלת את הזמן ומבצעת את הקריאות. הקריאה ל־InvokeRepeating צריכה להיות בתוך Start(): בתוך Update() היא הייתה מתזמנת קריאה חוזרת נוספת בכל פריים.

challenge icon

אתגר

קל

גרום לגייזר להתפרץ שלוש פעמים לפי לוח זמנים.

  1. ב־Start(), קרא ל־InvokeRepeating(nameof(Erupt), 1f, 2f);.
  2. כתוב void Erupt(): הוסף 1 ל־eruptions, קרא ל־ball.AddForce(Vector3.up * power, ForceMode.Impulse); ותעד ביומן את "Eruption " + eruptions.
  3. בסוף Erupt(), כאשר eruptions == 3, קרא ל־CancelInvoke(nameof(Erupt));.

לחץ על "שחק": הכדור ייזרק כלפי מעלה שלוש פעמים, בהפרש של 2 שניות. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class Geyser : MonoBehaviour
{
    public Rigidbody ball;
    public float power = 6f;
    int eruptions;

    void Start()
    {
        // להתפרץ 1 שנייה אחרי Play, ואז כל 2 שניות
    }

    // Erupt(): לספור, לדחוף את ball כלפי מעלה, לרשום ביומן; לעצור אחרי ההתפרצות השלישית
}

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

תרגלו בעצמכם: Unity אונליין