Menu
CoddyTech

הגיעו לבסיס

שיעור 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 שהושמד ולא התנתק מהאירוע.

challenge icon

אתגר

קל

אויבים שמגיעים לבסיס גורעים חיים.

  1. ב־EnemyData, הוסף public int damage;.
  2. ב־Enemy, הוסף public static event Action<Enemy> ReachedBase; (using System;). בנקודת הדרך האחרונה, הפעל את האירוע והשמד את האויב.
  3. ב־GameManager, הוסף [SerializeField] private int startLives = 20; וגם private int lives;, ואתחל אותו ב־Start. הירשם לאירוע כמו קודם; OnReachedBase מפחיתה ממספר החיים את enemy.data.damage.

לחץ על ״שחק״: שני האויבים נעלמים בבסיס. לאחר מכן לחץ על ״בדיקה״.

נסו בעצמכם

using UnityEngine;

// בהמשך: חיים, כסף, ה-HUD, ניצחון והפסד.
public class GameManager : MonoBehaviour
{
}

כל השיעורים ביחידה משחק Unity: הגנת מגדלים

תרגלו בעצמכם: Unity אונליין