Menu
CoddyTech

Powtórka: menedżer rund

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 16 z 60.

Ten rozdział dał grze jednego menedżera: singletona, do którego inni uzyskują dostęp bez pola, oraz stany, między którymi się przełącza. Menedżer rundy wykorzystuje oba te elementy.

challenge icon

Wyzwanie

Łatwy

Dokończ zbieranie monet; SetState jest już napisane.

  1. Dodaj public static RoundManager Instance;, ustawiane w Awake().
  2. W Update() wykonaj przełączanie w zależności od state: Ready czeka na spację; Playing odlicza timeLeft, a następnie przechodzi do kolejnego Ready albo do Finished po ostatniej rundzie.
  3. public bool TakeCoin(): tylko podczas Playing zlicz monetę, wyświetl Coins: 2 i zwróć true. Coin.cs niszczy zliczoną monetę, której dotknie Player.

Naciśnij „Graj” we wszystkich trzech rundach. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;
using TMPro;

public enum RoundState { Ready, Playing, Finished }

public class RoundManager : MonoBehaviour
{
    // singleton: statyczna instancja Instance, ustawiana w Awake()
    public GameObject readyPanel;
    public GameObject playPanel;
    public GameObject finishedPanel;
    public TMP_Text roundText;
    public TMP_Text coinsText;
    public TMP_Text finalText;
    public int rounds = 3;
    public float roundTime = 4f;
    private RoundState state;
    private int round = 1;
    private int coins;
    private float timeLeft;

    void Start()
    {
        SetState(RoundState.Ready);
    }

    void Update()
    {
        // wybór na podstawie state: Ready czeka na Space; Playing odlicza czas
    }

    void SetState(RoundState next)
    {
        state = next;
        readyPanel.SetActive(next == RoundState.Ready);
        playPanel.SetActive(next == RoundState.Playing);
        finishedPanel.SetActive(next == RoundState.Finished);
        if (next == RoundState.Ready) roundText.text = "Round " + round;
        if (next == RoundState.Playing) timeLeft = roundTime;
        if (next == RoundState.Finished) finalText.text = "Coins: " + coins;
    }

    // TakeCoin(): moneta jest liczona tylko w stanie Playing
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier

Poćwicz samodzielnie: Edytor online Unity