أول Coroutine لك
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 23 من 63.
يجب أن تنتهي Update() في كل إطار، لذا لا يمكنها الانتظار. أما الروتين المشترك فيمكنه ذلك: فهو أسلوب يتوقف مؤقتًا ثم يواصل التنفيذ لاحقًا من حيث توقف. يُرجع IEnumerator، وهو ما يتطلب using System.Collections;، وكل yield return فيه يمثل توقفًا مؤقتًا. في C#، يجعل yield return الأسلوب يمرر قيمه واحدة تلو الأخرى؛ وتطلب Unity القيمة التالية عند انتهاء الانتظار. ينتظر yield return null إطارًا واحدًا، بينما ينتظر yield return new WaitForSeconds(3f) مدة 3 ثوانٍ.
يبدأ StartCoroutine(Cycle()) تشغيل واحد. يتحول ضوء الإشارة هذا إلى الأخضر، ثم إلى الأصفر بعد 3 ثوانٍ، ثم إلى الأحمر بعد ثانية أخرى:
using System.Collections;
using UnityEngine;
public class TrafficLight : MonoBehaviour
{
Renderer lamp;
void Start()
{
lamp = GetComponent<Renderer>();
StartCoroutine(Cycle());
}
IEnumerator Cycle()
{
lamp.material.color = Color.green;
yield return new WaitForSeconds(3f);
lamp.material.color = Color.yellow;
yield return new WaitForSeconds(1f);
lamp.material.color = Color.red;
}
}يشغّل StartCoroutine الروتين المشترك حتى أول yield مباشرةً، ثم تتابع Start() التنفيذ؛ وتستأنفه Unity بعد كل انتظار، مع بقاء متغيراته المحلية على حالها. إن استدعاء Cycle(); وحده من دون StartCoroutine لا يفعل شيئًا: فهو ينشئ الأسلوب المتوقف مؤقتًا ثم يهمله، ولا يُنفَّذ منه أي سطر. كما أن yield return 3f; لا يعني انتظار 3 ثوانٍ: لا تعرف Unity سوى كائنات الانتظار مثل WaitForSeconds، وتتعامل مع أي قيمة أخرى على أنها إطار واحد.
التحدي
سهلتنتظر Spikes تحت الأرضية. اجعل Space يُفعّل الفخ باستخدام coroutine اسمها Spring:
- فورًا: سجّل
Click. - بعد نصف ثانية: تقفز الأشواك إلى أعلى بمقدار وحدة واحدة.
- بعد ذلك بثانيتين: تهبط مجددًا بمقدار وحدة واحدة.
اضغط Play، ثم اضغط Space وراقب، وبعدها اضغط Check.
جرّب بنفسك
using System.Collections;
using UnityEngine;
public class SpikeTrap : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// فعّل الفخ باستخدام روتين مشترك
}
}
// IEnumerator Spring(): انقر، انتظر 0.5 s، اصعد 1 وحدة، انتظر 2 s، انزل 1 وحدة
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي