Menu
CoddyTech
flag Ar iconالعربيةdown icon

مؤقّت للعدّ التنازلي

جزء من قسم بناء ألعاب حقيقية في رحلة 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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس بناء ألعاب حقيقية