Menu
CoddyTech

دفاع الأبراج المصغّر

جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 61 من 64.

تزحف الأعداء على الطريق نحو قاعدتك، ويحرسها برج واحد. يطلق البرج مقذوفات على أقرب عدو إليه ما دام ضمن المدى، وكل عدو يقضي عليه يمنحك ذهبًا. يُنفق الضغط على مفتاح المسافة الذهب على المستوى التالي للبرج: يصل كل مستوى إلى مدى أبعد، أو يطلق بسرعة أكبر، أو يسبب ضررًا أشد. إذا وصل عدو إلى القاعدة، فإنه يتجاوز دفاعاتها. بيانات المستويات هي بيانات اللعبة التي يضبطها المصمم في أصل، من دون تعديل الشيفرة، ويطلق البرج عددًا كبيرًا من المقذوفات، لذا يعيد استخدامها من مجموعة بدلًا من إنشاء مقذوف وتدميره مع كل طلقة.

اكتب نصين برمجيين: TowerData، نوع الأصل، وTower. النصوص البرمجية Creep وBolt وCreepSpawner جاهزة، وكذلك Nearest وShow الخاصتان بالبرج.

challenge icon

التحدي

صعب

أكمل البرج؛ Nearest(range) وShow() جاهزتان.

  1. TowerLevel: قابل للتسلسل، ويحتوي على range وfireEvery وdamage وcost عامة. يحتوي TowerData على public List<TowerLevel> levels.
  2. كل fireEvery ثانية، إذا عثر Nearest(range) على زاحف، فضع قذيفة من ObjectPool<Bolt> عند البرج: bolt.Launch(creep, damage, pool.Release).
  3. استدعِ Show() بعد أن يمنح Creep.Killed مكافأة bounty، وبعد أن يشتري الضغط على Space المستوى التالي مقابل cost الخاص به، مع تسجيل Tower level 2.

اضغط على «العب» وطوّر البرج. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;

public class Tower : MonoBehaviour
{
    [SerializeField] private TowerData data;
    [SerializeField] private Bolt boltPrefab;
    [SerializeField] private TMP_Text infoText;

    private int level;
    private int gold;

    // جاهز: أقرب creep إلى البرج ضمن النطاق، أو null.
    Creep Nearest(float range)
    {
        Creep nearest = null;
        float best = Mathf.Infinity;
        foreach (Collider hit in Physics.OverlapSphere(transform.position, range))
        {
            if (hit.TryGetComponent(out Creep creep))
            {
                float distance = Vector3.Distance(transform.position, creep.transform.position);
                if (distance < best)
                {
                    best = distance;
                    nearest = creep;
                }
            }
        }
        return nearest;
    }

    // جاهز: يعرض المستوى والذهب، مثل Level 1, 0 gold.
    void Show()
    {
        infoText.text = "Level " + (level + 1) + ", " + gold + " gold";
    }
}

جميع دروس هندسة الألعاب في Unity

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