Invoke
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 21 من 63.
يستدعي Invoke("Explode", 3f) طريقة السكربت نفسه Explode مرة واحدة بعد 3 ثوانٍ من الآن، ويواصل الكود الذي يليه التنفيذ فورًا. يعثر Unity على الطريقة باستخدام اسمها المُعطى كسلسلة نصية، ولا تأخذ الطريقة أي معاملات. تنفجر هذه القنبلة بعد 3 ثوانٍ من بدء اللعبة:
void Start()
{
Invoke("Explode", 3f);
}
void Explode()
{
Debug.Log("Boom");
Destroy(gameObject);
}لأن الاسم سلسلة نصية، لا يستطيع المترجم التحقق منه. يُترجم Invoke("Explod", 3f) بنجاح، وبعد 3 ثوانٍ تسجّل Unity الرسالة Trying to Invoke method: Bomb.Explod couldn't be called. بدلًا من حدوث الانفجار. تحلّ nameof في C# هذه المشكلة: nameof(Explode) هي السلسلة النصية "Explode"، التي ينشئها المترجم من اسم تحقق منه، لذا فإن وجود خطأ مطبعي فيها يؤدي إلى خطأ في الترجمة تراه قبل تشغيل اللعبة. اكتب Invoke(nameof(Explode), 3f);.
التحدي
سهلالـPlatform بين الحافتين منصة متداعية. خاصية Rigidbody فيها حركية، لذا تظل معلقة في الهواء. اكتب نص Crumble البرمجي الخاص بها:
- عندما يهبط اللاعب عليها، تنتظر
delayثانية واحدة (1 في Inspector)، ثم تسقط. - السقوط هو أسلوب اسمه
Fall: يفعّل فيزياء المنصة (isKinematic = false) ويسجّلCrumble!. - قبل أن يلمسها اللاعب، تبقى المنصة في مكانها.
استخدم nameof لاسم الأسلوب. اضغط على Play وامشِ على المنصة باستخدام الأسهم، ثم اضغط على Check.
جرّب بنفسك
using UnityEngine;
public class Crumble : MonoBehaviour
{
public float delay = 1f;
Rigidbody body;
void Start()
{
body = GetComponent<Rigidbody>();
}
void OnCollisionEnter(Collision collision)
{
// عندما يهبط اللاعب: اجعل المنصة تسقط بعد delay ثانية
}
// Fall(): فعّل فيزياء المنصة وسجّل Crumble!
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق