موجة
الدرس 5 من 25 في دورة لعبة Unity: الدفاع عن الأبراج على Coddy.
أصبح Grunt وRunner الآن قالبين جاهزين، ومعهما Tank وBoss، ويقف Spawner عند WP0. تتكون الموجة من بضعة أرقام: أي عدو، وعددهم، والمسافة الزمنية بينهم. لذا فإن Wave فئة من النوع [System.Serializable]، ويحتفظ المُولِّد بقائمة List<Wave> يملؤها Inspector بموجات اللعبة الثماني. من دون [System.Serializable]، لا يستطيع Unity ملء القائمة، فتبقى فارغة.
إن إنشاء الأعداء بفواصل زمنية هو روتين مشترك: تنتظر yield return new WaitForSeconds(...) من دون إيقاف اللعبة. لا يمكن للقالب الجاهز الإشارة إلى نقاط المسار الموجودة في المشهد، لذا يمرر المُولِّد إلى كل عدو جديد نقاط المسار الخاصة به مباشرةً بعد Instantiate:
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);التحدي
سهلأرسل الموجة الأولى من جنود Grunts عبر المسار.
- في
Wave.cs، ضع[System.Serializable]علىWave، معpublic Enemy enemy;وpublic int count;وpublic float spacing;. - في
WaveSpawner، أضف[SerializeField] private List<Wave> waves;و[SerializeField] private Transform[] waypoints;. - من
Start، شغّل coroutine تُنشئwaves[0].countمن الأعداء كما سبق.
اضغط «العب»: يخرج ستة من جنود Grunts في مسيرة، بفاصل 1.2 ثانية. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
// يأتي لاحقًا: يرسل الأعداء على طول المسار في موجات.
public class WaveSpawner : MonoBehaviour
{
}
جميع دروس لعبة Unity: الدفاع عن الأبراج
تدرّب بنفسك: Playground لـ Unity