Menu
CoddyTech
flag Ar iconالعربيةdown icon

العناصر القابلة للالتقاط

جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 17 من 63.

عنصر الالتقاط هو مُشغِّل له نص برمجي خاص به. عندما يدخل شيء ما، يتحقق عنصر الالتقاط من أنه اللاعب، ويمنحه تأثيره ثم يدمّر نفسه. يحتفظ النص البرمجي للاعب بالنتيجة ويتيح طريقة عامة لها. تعالج حزمة الصحة أي شيء لديه نص برمجي Health:

// HealthPack.cs
public int amount = 25;

void OnTriggerEnter(Collider other)
{
    if (other.TryGetComponent(out Health health) && health.hp < 100)
    {
        health.Heal(amount);
        Destroy(gameObject);
    }
}
// Health.cs، على اللاعب
public int hp = 50;

public void Heal(int amount)
{
    hp = Mathf.Min(hp + amount, 100);
    Debug.Log("HP: " + hp);
}

تكون other.TryGetComponent(out Health health) false بالنسبة إلى صندوق ينزلق نحو الحزمة، لذا لا يمكن التقاطها إلا بواسطة كائن لديه نص برمجي Health، أما اللاعب الذي يتمتع بصحة كاملة فيترك الحزمة لاستخدامها لاحقًا. تعثر الحزمة على اللاعب عبر other، لذلك لا تحتاج أي حزمة إلى مرجع في Inspector، ويمكن أن يحتوي المستوى على خمسين منها. إن Heal هي public لأن نصًا برمجيًا آخر يستدعيها، وحد الصحة الأقصى البالغ 100 موجود في Health، المكان الوحيد الذي يملك hp. تزيل Destroy(gameObject) الحزمة؛ أما Destroy(other.gameObject) فستزيل اللاعب.

challenge icon

التحدي

سهل

يحمل اللاعب Blaster: ammo (4 في البداية) وmaxAmmo (10). تحرّكه الأسهم ويُطلق مفتاح المسافة طلقة، ويُسجَّل كلاهما. اجعل صناديق الذخيرة تعيد تعبئته:

  • في Blaster.cs، أضف أسلوبًا عامًا int AddAmmo(int amount). يأخذ من amount أكبر قدر ممكن دون تجاوز maxAmmo، ويسجّل الإجمالي الجديد مثل Ammo: 7، ويُعيد مقدار ما أخذه.
  • في AmmoCrate.cs، عندما يدخل اللاعب صندوقًا، اعرض على Blaster مقدار amount الموجود في الصندوق واطرح منه المقدار الذي أخذه. يُزال الصندوق إذا أصبح فارغًا؛ أما إذا بقيت فيه ذخيرة فيظل موجودًا بما تبقّى، لزيارة لاحقة.

يحتوي الصندوق الأول على 3 والثاني على 5. اضغط Play، وتحرك إلى اليمين، وأطلق بضع طلقات ثم عُد إلى الصندوق الثاني، وبعدها اضغط Check.

جرّب بنفسك

using UnityEngine;

public class AmmoCrate : MonoBehaviour
{
    public int amount = 3;

    void OnTriggerEnter(Collider other)
    {
        // يأخذ Blaster الخاص باللاعب ما يتسع له؛ ويحتفظ الصندوق بالباقي ويختفي عندما يفرغ
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

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