Menu
CoddyTech

Para

Coddy'nin Unity Oyunu: Kule Savunması kursunda ders 12 / 25.

Kuleler paraya mal olur. Para GameManager'a aittir ve BuildManager ondan ödeme yapmasını ister. İstemek ve ödemek tek bir adımdır: parayı kontrol eden, yeterli olduğunda parayı alan ve bunu yapıp yapmadığını Dictionary.TryGetValue yanıtlarındaki gibi bir bool ile belirten bir yöntem. Bir otomatın cüzdanı:

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

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

Kontrol yapılmadan hiçbir çağıran ödeme yapamaz ve başka hiçbir şey paraları değiştirmediği için para miktarı asla sıfırın altına düşmez. price, prefab üzerinde bulunur: kendi betiğinin bir alanıdır ve prefab'ın Inspector'ında ayarlanır. Prefab, diğer nesneler gibi yüklenmiş bir nesnedir; bu nedenle snackPrefab.price, herhangi bir şey oluşturulmadan önce okunarak oluşturulup oluşturulmaması gerektiğine karar verilebilir.

challenge icon

Görev

Orta

Kuleler para harcar: başlangıçta 150, her Ok için 50.

  1. Tower: public int cost = 50; ekle.
  2. GameManager: [SerializeField] private int startMoney = 150;, [SerializeField] private TMP_Text moneyText; ve private int money; ekle; Money: 150 olarak gösterilir.
  3. public bool TrySpend(int amount): amount > money ise false döndür; değilse miktarı düş, göster ve true döndür.
  4. BuildManager: [SerializeField] private GameManager game; ekle; yalnızca game.TrySpend(towerPrefab.cost) başarılı olursa inşa et, aksi hâlde Not enough money mesajını günlüğe yaz.

“Oyna” düğmesine bas ve paran bitene kadar inşa et. Ardından “Kontrol et” düğmesine bas.

Kendin dene

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 Oyunu: Kule Savunması bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground