הגיעו לבסיס
שיעור 3 מתוך 25 בקורס משחק Unity: הגנת מגדלים של Coddy.
אויב שנמצא בנקודת הציון האחרונה הגיע לבסיס: הוא נעלם, והבסיס מאבד חיים. החיים שייכים ל-GameManager. בקרוב האויבים ייווצרו מ-prefabs, ו-prefab לא יכול להפנות אל ה-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;, ואתחל אותו ב־Start. הירשם לאירוע כמו קודם;OnReachedBaseמפחיתה ממספר החיים אתenemy.data.damage.
לחץ על ״שחק״: שני האויבים נעלמים בבסיס. לאחר מכן לחץ על ״בדיקה״.
נסו בעצמכם
using UnityEngine;
// בהמשך: חיים, כסף, ה-HUD, ניצחון והפסד.
public class GameManager : MonoBehaviour
{
}
כל השיעורים ביחידה משחק Unity: הגנת מגדלים
תרגלו בעצמכם: Unity אונליין