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

موجات الأعداء

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

challenge icon

التحدي

متوسط

تأتي الأعداء الآن على شكل موجات، والموجات عبارة عن بيانات. احتفظ بكل ما أعددته في الدروس السابقة. لم تعد الساحة تحتوي على أعداء خاصين بها: تحمل العناصر الجاهزة Grunt وDasher النصوص البرمجية، وتقف أربع نقاط ظهور في الزوايا، ويحمل العنصر Spawner في الوسط النص البرمجي WaveSpawner.

  • في WaveSet.cs، أضف فئة Wave مع [System.Serializable]، وتتضمن public Enemy enemy (العنصر الجاهز)، وpublic int count وpublic float spacing. إن WaveSet هو ScriptableObject مع [CreateAssetMenu]، ويتضمن public List<Wave> waves وpublic float restBetweenWaves. يحتوي الأصل Arena في المشهد على ثلاث موجات (3 من الأعداء Grunt بفاصل 0.5 s، و2 من الأعداء Dasher بفاصل 1 s، و5 من الأعداء Grunt بفاصل 0.4 s)، مع استراحة مدتها 2 seconds.
  • أضف إلى Enemy الحدث public static event Action<Enemy> Died، واستدعِه مع العدو مباشرةً قبل تدميره.
  • يحتوي WaveSpawner على waveSet وspawnPoints من Inspector، وعلى public int Wave { get; private set; }، وهو رقم الموجة الجارية. تبدأ coroutine من Start لتشغيل موجات الأصل بالترتيب. لكل موجة: أضف 1 إلى Wave وسجّلها، لتظهر بالشكل Wave 1؛ أظهر أعداء الموجة بعدد count وبفاصل spacing seconds، بحيث يظهر العدو i (بدءًا من 0) عند spawnPoints[i % spawnPoints.Length]؛ انتظر حتى لا يبقى أي عدو حي؛ ثم استرح مدة restBetweenWaves seconds. بعد الموجة الأخيرة، تبدأ المجموعة من جديد بموجتها الأولى، ويستمر Wave بالعد: 4 و5 وما إلى ذلك.
  • تتبّع عدد الأعداء الأحياء باستخدام الحدث Died: اشترك فيه في OnEnable وألغِ الاشتراك في OnDisable. لا يقرأ العنصر المُولِّد إلا الأصل: في Editor، إذا غيّرت أصلًا أثناء تشغيل اللعبة، فسيظل التغيير محفوظًا في الأصل بعد Play.

اضغط على Play واصمد أمام بضع موجات، ثم اضغط على Check.

جرّب بنفسك

using UnityEngine;

public class WaveSpawner : MonoBehaviour
{
    // سيُكمل درس لاحق هذا الجزء: يُرسل الموجات إلى الساحة.
}

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