Menu
CoddyTech

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);.

challenge icon

التحدي

سهل

اجعل المنصة تنهار بعد لحظة من هبوط اللاعب عليها.

  1. في OnCollisionEnter، عندما يكون collision.gameObject.CompareTag("Player")، استدعِ Invoke(nameof(Fall), delay);.
  2. أضف 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!
}

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

تدرّب بنفسك: Playground لـ Unity