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

InvokeRepeating, CancelInvoke

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

التحدي

سهل

يقذف النافورة الحارة الكرة الموجودة فوقها في الهواء. يحتوي البرنامج النصي الخاص بها على ball وpower وعدّاد eruptions. اجعلها تثور وفق جدول زمني:

  • يحدث الثوران الأول بعد ثانية واحدة من الضغط على Play، ثم يحدث ثوران كل ثانيتين.
  • الثوران عبارة عن دالة باسم Erupt: تزيد eruptions بمقدار 1، وتدفع الكرة إلى الأعلى باستخدام 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(): احسب عدد مرات الثوران، وادفع الكرة إلى الأعلى، وسجّل ذلك؛ توقّف بعد المرة الثالثة
}
quiz iconاختبر نفسك

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

جميع دروس الفيزياء وأسلوب اللعب