Menu
CoddyTech

Dalga Sayacı

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

HUD, dalga numarasını gösterir. Bunu spawner bilir ve GameManager gösterir; bu yüzden spawner, dalga numarasını ve toplam dalga sayısını içeren bir C# olayı olan WaveStarted'ı tetikler. Düşmanların statik olaylarından farklı olarak bu olay tek bir spawner'a aittir ve GameManager, spawner alanı üzerinden olaya abone olur:

void OnEnable()
{
    spawner.WaveStarted += ShowWave;
}

Bir Action<int, int> iki int değeri aktarır; bu nedenle ShowWave iki parametre alır: void ShowWave(int wave, int total).

challenge icon

Görev

Orta

Hangi dalganın devam ettiğini göster.

  1. WaveSpawner içinde public event Action<int, int> WaveStarted; ekle (using System;) ve bir dalga başlarken i + 1 ile waves.Count değerlerini kullanarak olayı tetikle.
  2. GameManager içinde serileştirilmiş spawner (WaveSpawner) ve waveText (TMP_Text) ekle. OnEnable içinde abone ol, OnDisable içinde abonelikten çık ve Wave 1/8 göster.

“Oyna” düğmesine bas: İlk dalga başlarken sağ üstte Wave 1/8 görünür. Ardından “Kontrol et” düğmesine bas.

Kendin dene

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

Kendi başına pratik yap: Unity playground