Menu
CoddyTech

כסף

שיעור 12 מתוך 25 בקורס משחק Unity: הגנת מגדלים של Coddy.

מגדלים עולים כסף. הכסף שייך ל־GameManager, וה־BuildManager מבקש ממנו לשלם. הבקשה והתשלום מתבצעים בצעד אחד: מתודה שבודקת את כמות הכסף, לוקחת אותו אם יש מספיק, ומציינת באמצעות bool אם הצליחה, בדומה לתשובה של Dictionary.TryGetValue. הארנק של מכונת ממכר אוטומטית:

public bool TryPay(int price)
{
    if (price > coins)
    {
        return false;
    }

    coins -= price;
    coinText.text = coins + " coins";
    return true;
}

אף גורם שקורא למתודה לא יכול לשלם בלי הבדיקה, ומספר המטבעות לעולם לא יורד מתחת לאפס, כי שום דבר אחר לא משנה אותו. המחיר נמצא ב־prefab: שדה משלו בסקריפט שלו, שמוגדר ב־Inspector של ה־prefab. prefab הוא אובייקט שנטען כמו כל אובייקט אחר, ולכן אפשר לקרוא את snackPrefab.price לפני שיוצרים מופע שלו, כדי להחליט אם ליצור אותו.

challenge icon

אתגר

בינוני

מגדלים עולים כסף: 150 להתחלה, 50 לכל חץ.

  1. Tower: הוסיפו public int cost = 50;.
  2. GameManager: הוסיפו [SerializeField] private int startMoney = 150;, [SerializeField] private TMP_Text moneyText; וגם private int money;, שמוצג בתור Money: 150.
  3. public bool TrySpend(int amount): מחזירה false אם amount > money; אחרת מפחיתים את הסכום, מציגים אותו ומחזירים true.
  4. BuildManager: הוסיפו [SerializeField] private GameManager game;; בנו רק אם game.TrySpend(towerPrefab.cost), אחרת רשמו Not enough money.

לחצו על "שחק" ובנו עד שהכסף ייגמר. לאחר מכן לחצו על "בדיקה".

נסו בעצמכם

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    [SerializeField] private int startLives = 20;
    [SerializeField] private TMP_Text livesText;

    private int lives;

    void OnEnable()
    {
        Enemy.ReachedBase += OnReachedBase;
    }

    void OnDisable()
    {
        Enemy.ReachedBase -= OnReachedBase;
    }

    void Start()
    {
        lives = startLives;
        ShowLives();
    }

    void OnReachedBase(Enemy enemy)
    {
        lives -= enemy.data.damage;
        ShowLives();
    }

    void ShowLives()
    {
        livesText.text = "Lives: " + lives;
    }
}

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

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