Menu
CoddyTech

ウェーブカウンター

Coddyの「Unityゲーム:タワーディフェンス」コースのレッスン 24/25。

HUD にはウェーブ番号が表示されます。スポーナーはその番号を把握しており、GameManager が表示するため、スポーナーはウェーブ番号とウェーブの総数を伴う C# イベント WaveStarted を発生させます。敵の静的イベントとは異なり、このイベントはそのスポーナーに属し、GameManager は spawner フィールドを通じて購読します。

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

Action<int, int> は 2 つの int を渡すため、ShowWave は 2 つの引数を受け取ります。void ShowWave(int wave, int total)。

challenge icon

チャレンジ

中級

現在のウェーブを表示します。

  1. WaveSpawnerで、public event Action<int, int> WaveStarted;(using System;)を追加し、ウェーブが始まるときにi + 1とwaves.Countを渡してイベントを発生させます。
  2. GameManagerで、シリアライズされたspawner(WaveSpawner)とwaveText(TMP_Text)を追加します。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プレイグラウンド