Menu
CoddyTech

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

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

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

אתגר

קל

הגייזר Geyser משליך לאוויר את הכדור שנמצא מעליו. בסקריפט שלו יש את ball, את power ומונה eruptions. תכנתו אותו להתפרץ לפי לוח זמנים:

  • ההתפרצות הראשונה מתרחשת שנייה אחת לאחר הלחיצה על Play, ולאחר מכן התפרצות אחת בכל 2 שניות.
  • התפרצות היא מתודה בשם Erupt: היא מוסיפה 1 ל-eruptions, דוחפת את הכדור כלפי מעלה באמצעות ball.AddForce(Vector3.up * power, ForceMode.Impulse) ומתעדת Eruption 1, Eruption 2 וכן הלאה.
  • לאחר ההתפרצות השלישית הגייזר מפסיק לתמיד.

לחצו על Play וצפו בכדור, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;

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

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

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

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

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