Menu
CoddyTech

العناصر القابلة للجمع

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

الغرض القابل للالتقاط هو مُحفّز له نص برمجي خاص به. عندما يدخل شيء ما، يتحقق الغرض من أنه اللاعب، ثم يمنحه تأثيره ويدمّر نفسه. يحتفظ النص البرمجي للاعب بالنتيجة ويتيح طريقة عامة لتنفيذ ذلك. تعالج حزمة الصحة أي شيء لديه نص برمجي باسم 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).

  1. في Blaster.cs، أضف public int AddAmmo(int amount): int taken = Mathf.Min(amount, maxAmmo - ammo);، وأضِف القيمة إلى ammo، وسجّل "Ammo: " + ammo، ثم أعد taken.
  2. في AmmoCrate.cs، عندما يتحقق other.TryGetComponent(out Blaster blaster)، استدعِ blaster.AddAmmo(amount); وDestroy(gameObject);.

اضغط «العب» وتحرك إلى اليمين: تعرض وحدة التحكم Ammo: 7، ثم Ammo: 10. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;

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

    void OnTriggerEnter(Collider other)
    {
        // يأخذ Blaster الخاص باللاعب الذخيرة، ويختفي الصندوق
    }
}

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

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