Menu
CoddyTech

טיימר ספירה לאחור

חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 4 מתוך 56.

ספירה לאחור שומרת את הזמן שנותר ב-float ומפחיתה ממנו את Time.deltaTime בכל פריים. הפריים האחרון כמעט אף פעם לא מסתיים בדיוק ב-0, לכן Mathf.Max עוצר את הספירה שם, והסיום חייב להתרחש פעם אחת בלבד. הפתיל הזה נותן לשחקן 5 שניות לנטרל פצצה:

public TMP_Text fuseText;
public float fuse = 5f;
private bool exploded;

void Update()
{
    if (exploded)
    {
        return;
    }

    fuse = Mathf.Max(fuse - Time.deltaTime, 0f);
    fuseText.text = "Fuse: " + Mathf.CeilToInt(fuse);

    if (fuse == 0f)
    {
        exploded = true;
        fuseText.text = "BOOM";
        fuseText.color = Color.red;
    }
}

Mathf.CeilToInt מעגל כלפי מעלה, וזה מה שספירה לאחור מציגה: 5 במשך כל השנייה הראשונה (4.99 מתעגל כלפי מעלה ל-5), 1 במהלך השנייה האחרונה, ו-0 רק כשנגמר הזמן. (int)fuse היה מעגל את 4.99 כלפי מטה ל-4 ומציג 0 במשך כל השנייה האחרונה בזמן שהפצצה עדיין מתקתקת; Mathf.RoundToInt היה מציג 0 במשך חצי השנייה האחרונה. ספירה לאחור ארוכה יותר שמוצגת בדקות ובשניות פועלת לפי אותו הכלל: קודם מעגלים את הזמן כלפי מעלה לשניות שלמות, ואז מעצבים אותן.

ה-return המוקדם משאיר את BOOM על המסך: בלעדיו, הפריים הבא היה כותב Fuse: 0 מעליו. גם לטקסט יש צבע, ו-fuseText.color = Color.red צובע אותו באדום.

challenge icon

אתגר

קל

מד החניה סופר לאחור את הזמן ששולם. כתבו את Update() שלו בקובץ ParkingMeter.cs (הסצנה מקשרת אל meterText):

  • timeLeft מתחיל ב־75 שניות (מוגדר ב־Inspector) ויורד בכל פריים, אך לעולם לא מתחת ל־0.
  • meterText מציג את הזמן שנותר בדקות ובשניות, בעיגול כלפי מעלה לשניות שלמות: מ־75 ועד 74.01 הוא מציג 1:15, וכשנותרו 0.4 שניות הוא מציג 0:01.
  • לחיצה על Space מוסיפה מטבע: עוד 30 שניות, אך לעולם לא יותר מ־maxTime (120, שמוצג כ־2:00).
  • ב־0 הטקסט מציג EXPIRED, באדום (Color.red). מכאן ואילך המד נשאר על 0, ואי אפשר להוסיף עוד מטבעות.

לחצו על Play, הוסיפו כמה מטבעות ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;
using TMPro;

public class ParkingMeter : MonoBehaviour
{
    public TMP_Text meterText;
    public float timeLeft = 60f;
    public float maxTime = 120f;

    void Update()
    {
        // הקטן את timeLeft והצג אותו בדקות ובשניות; Space מוסיף 30 שניות
    }
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה בונים משחקים אמיתיים