מונה גלים
שיעור 24 מתוך 25 בקורס משחק Unity: הגנת מגדלים של Coddy.
ה־HUD מציג את מספר הגל. הספאונר יודע אותו, ו־GameManager מציג אותו, לכן הספאונר מעלה אירוע C#, בשם WaveStarted, עם הגל ומספר הגלים. בניגוד לאירועים הסטטיים של האויבים, האירוע שייך לספאונר יחיד, ו־GameManager נרשם אליו דרך השדה spawner שלו:
void OnEnable()
{
spawner.WaveStarted += ShowWave;
}Action<int, int> מעביר שני ערכי int, לכן ShowWave מקבלת שניים: void ShowWave(int wave, int total).
אתגר
בינוניהציגו איזו קבוצה מתרחשת כעת.
- ב־
WaveSpawner, הוסיפוpublic event Action<int, int> WaveStarted;(using System;) והפעילו אותו עםi + 1ועםwaves.Countכשהגל מתחיל. - ב־
GameManager, הוסיפו אתspawner(WaveSpawner) ואתwaveText(TMP_Text) עם מאפיין serialized. הירשמו ב־OnEnable, בטלו את ההרשמה ב־OnDisable, והציגוWave 1/8.
לחצו על "שחק": הכיתוב Wave 1/8 מופיע בפינה הימנית העליונה כשהגל הראשון מתחיל. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
[SerializeField] private int startMoney = 150;
[SerializeField] private int startLives = 20;
[SerializeField] private TMP_Text moneyText;
[SerializeField] private TMP_Text livesText;
private int money;
private int lives;
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
Enemy.Killed += OnKilled;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
Enemy.Killed -= OnKilled;
}
void Start()
{
money = startMoney;
lives = startLives;
ShowMoney();
ShowLives();
}
public bool TrySpend(int amount)
{
if (amount > money)
{
return false;
}
money -= amount;
ShowMoney();
return true;
}
public void Earn(int amount)
{
money += amount;
ShowMoney();
}
void OnKilled(Enemy enemy)
{
Earn(enemy.data.reward);
}
void OnReachedBase(Enemy enemy)
{
lives -= enemy.data.damage;
ShowLives();
}
void ShowMoney()
{
moneyText.text = "Money: " + money;
}
void ShowLives()
{
livesText.text = "Lives: " + lives;
}
}
כל השיעורים ביחידה משחק Unity: הגנת מגדלים
תרגלו בעצמכם: Unity אונליין