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() سيحجز استدعاءً متكررًا إضافيًا في كل إطار.
التحدي
سهليقذف النافورة الحارة الكرة الموجودة فوقها في الهواء. يحتوي البرنامج النصي الخاص بها على 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(): احسب عدد مرات الثوران، وادفع الكرة إلى الأعلى، وسجّل ذلك؛ توقّف بعد المرة الثالثة
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي