الوصول إلى القاعدة
الدرس 3 من 25 في دورة لعبة Unity: الدفاع عن الأبراج على Coddy.
وصل عدو عند آخر نقطة مسار إلى القاعدة: يختفي، وتخسر القاعدة أرواحًا. الأرواح تابعة إلى GameManager. قريبًا، ستُنشأ الأعداء من قوالب جاهزة، ولا يمكن للقالب الجاهز أن يشير إلى GameManager في المشهد، لذلك يرسل العدو تقريرًا باستخدام حدث ثابت. ينتمي هذا الحدث إلى الصنف Enemy، لذا يشترك GameManager فيه مرة واحدة، ويتلقى إشعارات من كل عدو، بما في ذلك الأعداء الذين يُنشؤون لاحقًا. يطلقه العدو باستخدام ReachedBase?.Invoke(this);: تتخطى ? إطلاقه عندما لا يستمع إليه أحد، وتُخبر this المستمعَ بنوع العدو الذي وصل.
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
}يظل الحدث الثابت موجودًا طوال مدة اللعبة، لذا يجب أن يقابل كل += عاملُ -= الخاص به: إذ سيظل استدعاء GameManager المُدمَّر قائمًا إن لم يُلغِ اشتراكه.
التحدي
سهلالأعداء الذين يصلون إلى القاعدة يخصمون أرواحًا.
- في
EnemyData، أضفpublic int damage;. - في
Enemy، أضفpublic static event Action<Enemy> ReachedBase;(using System;). عند نقطة المسار الأخيرة، أطلق الحدث ودمّر العدو. - في
GameManager، أضف[SerializeField] private int startLives = 20;وprivate int lives;، ثم عيّن قيمةlivesفي Start. اشترك كما سبق؛ إذ تخصمOnReachedBaseقيمةenemy.data.damageمن الأرواح.
اضغط «العب»: سيختفي كلا العدوين عند القاعدة. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
// يأتي لاحقًا: الأرواح، المال، واجهة عرض المعلومات (HUD)، الفوز والخسارة.
public class GameManager : MonoBehaviour
{
}
جميع دروس لعبة Unity: الدفاع عن الأبراج
تدرّب بنفسك: Playground لـ Unity