Jeden skrypt obsługuje grę
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 12 z 60.
Umieść wynik w skrypcie gracza, życia w skrypcie zdrowia, a sprawdzanie końca gry w trzecim skrypcie. Każdy skrypt potrzebuje więc wartości z pozostałych, a każda nowa zasada wymaga zmian w kilku plikach. W grach Unity te wartości zwykle przechowuje jeden skrypt, GameManager, umieszczony na osobnym, pustym obiekcie GameObject. Zarządza on wynikiem, życiami i zasadą kończącą grę. Pozostałe skrypty tylko zgłaszają, co się wydarzyło, wywołując jego metody publiczne. W tej serii rzutów karnych siatka zgłasza każdego gola:
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);
}Siatka 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 rozgrywka obejmowała 3 strzały, wystarczy zmienić jedną liczbę w jednym skrypcie. Sprawdzenie na początku ShotTaken zapobiega zaliczeniu piłki, która wtoczy się do bramki po końcu gry.
Wypełnij pole game w Inspectorze, przeciągając na nie obiekt GameManager. Unity znajdzie skrypt GameManager na tym obiekcie. Menedżer jest też miejscem na HUD: gdy przechowuje tekst wyniku i panel końca gry, ekran zmienia się w tej samej metodzie, która zmienia wartości, a żaden inny skrypt nie dotyka interfejsu użytkownika.
Wyzwanie
ŁatwyPozwól, aby GameManager śledził wynik i liczbę żyć.
AddScore(int points): jeśli niegameOver, dodaj doscorei wyświetlScore: 6wscoreText.LoseLife(): odejmij 1 odlivesi wyświetlLives: 2; przy 0 ustawgameOver, pokażgameOverPanel, ustawplayer.enabled = false.- W
GemiBomb, gdyother.CompareTag("Player"), wywołajgame.AddScore(points)lubgame.LoseLife(), a następnieDestroy(gameObject).
Naciśnij „Graj” i uderz w trzy bomby. Następnie naciśnij „Sprawdź”.
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 żyć gra się kończy
}
}
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski 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ąPoćwicz samodzielnie: Edytor online Unity