Jeden skrypt obsługuje grę
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 12 z 56.
Umieść wynik w skrypcie gracza, liczbę żyć w skrypcie zdrowia, a sprawdzanie końca gry w trzecim skrypcie — każdy skrypt potrzebuje więc danych pozostałych, a każda nowa zasada wymaga zmian w kilku plikach. W grach Unity te dane zwykle są przechowywane w jednym skrypcie, GameManager, przypisanym do osobnego, pustego obiektu GameObject. Zarządza on wynikiem, liczbą żyć i zasadą kończącą grę. Inne skrypty jedynie zgłaszają, co się wydarzyło, wywołując jego publiczne metody. W tej serii rzutów karnych bramka zgłasza każdy gol:
public class GameManager : MonoBehaviour
{
private int goals;
private int shotsLeft = 5;
public void ShotTaken(bool scored)
{
if (shotsLeft == 0) return;
shotsLeft--;
if (scored) goals++;
Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
}
}// Net.cs, na wyzwalaczu bramki
public GameManager game;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Ball")) game.ShotTaken(true);
}Bramka nie wie, ile strzałów pozostało ani kiedy kończy się gra. Zgłasza gola, a menedżer decyduje, co to oznacza; skrypt bramkarza zgłasza obronę za pomocą game.ShotTaken(false). Aby rozegrać serię 3 strzałów, zmieniasz jedną liczbę w jednym skrypcie. Sprawdzenie na początku metody ShotTaken zapobiega zaliczeniu piłki, która wtoczy się do bramki po końcu meczu.
Uzupełniasz pole game w Inspectorze, przeciągając na nie obiekt GameManager, a Unity znajduje skrypt GameManager na tym obiekcie. Menedżer jest również miejscem, w którym obsługuje się HUD: gdy przechowuje tekst wyniku i panel końca gry, ekran zmienia się w tej samej metodzie, która zmienia liczby, a żaden inny skrypt nie dotyka interfejsu użytkownika.
Wyzwanie
ŁatwyPolowanie na klejnoty. Strzałki poruszają graczem (jego skrypt jest gotowy). Klejnoty są warte tyle, ile wynosi ich points, bomby kosztują życie, a nad wszystkim czuwa GameManager. Inspector już łączy pole game każdego klejnotu i każdej bomby z obiektem GameManager, a pola GameManager z HUD-em i graczem.
W GameManager.cs:
AddScore(int points)dodaje punkty doscorei wyświetla je wscoreTextjakoScore: 6.LoseLife()odejmuje 1 odlives(na początku są 3) i wyświetla je wlivesTextjakoLives: 2.- Gdy
livesosiągnie 0, gra się kończy: pokażgameOverPaneli wyłącz skrypt gracza, aby strzałki przestały działać. PotemAddScorejuż niczego nie zmienia.
W Gem.cs i Bomb.cs: gdy gracz (oznaczony tagiem Player) dotknie klejnotu lub bomby, obiekt zgłasza to do gry (klejnot przekazuje swoje points, a bomba utratę życia) i usuwa się.
Naciśnij Play, zbieraj klejnoty i dotykaj bomb, a następnie naciśnij Check.
Spróbuj swoich sił
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public TMP_Text scoreText;
public TMP_Text livesText;
public GameObject gameOverPanel;
public Player player;
private int score;
private int lives = 3;
private bool gameOver;
public void AddScore(int points)
{
// dodaj punkty i wyświetl nowy wynik, chyba że gra się skończyła
}
public void LoseLife()
{
// odejmij jedno życie i wyświetl pozostałą liczbę żyć; przy 0 życiach gra się kończy
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku3Menedżer gry
Jeden skrypt obsługuje gręSingletonStany gryInstrukcja switch dla stanuPowtórka: menedżer rund6Projekt: Niekończący się bieg
Trzy toryPrzeszkody przed tobą