Invoke
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 22 من 71.
يستدعي 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);.
التحدي
سهلاجعل المنصة تنهار بعد لحظة من هبوط اللاعب عليها.
- في
OnCollisionEnter، عندما يكونcollision.gameObject.CompareTag("Player")، استدعِInvoke(nameof(Fall), delay);. - أضف
void Fall(): عيّنbody.isKinematic = false;وسجّلCrumble!.
اضغط على «العب» وامشِ على المنصة: ستسقط بعد ثانية. ثم اضغط على «تحقق».
جرّب بنفسك
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 للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity