Erneut spielen
Lektion 12 von 14 im Kurs Unity-Spiel: 3D-Snake von Coddy.
Wenn die Schlange stirbt, erscheint ein Game-Over-Fenster mit einer Schaltfläche „Erneut spielen“. Das Fenster befindet sich im HUD und ist anfangs ausgeblendet. SetActive(true) zeigt es an. Die Schlange weiß, wann sie stirbt, und der GameManager verwaltet die Bildschirme. Deshalb ruft Die() eine öffentliche Methode GameOver() des GameManagers auf.
„Erneut spielen“ startet das Spiel neu, indem die Szene erneut geladen wird. Alle Objekte kehren in den Zustand zurück, den die Szene vorgibt: die Schlange auf ihrem ersten Feld mit zwei Segmenten, die Punktzahl bei 0 und das Fenster ausgeblendet. Die Schaltfläche „Erneut versuchen“ eines Rennspiels ist auf dieselbe Weise verknüpft:
void Start()
{
retryButton.onClick.AddListener(Retry);
}
void Retry()
{
SceneManager.LoadScene("Track1");
}Das Laden anhand des Namens bindet die Schaltfläche an eine bestimmte Szene. SceneManager.GetActiveScene().buildIndex gibt die laufende Szene an. Wenn sie geladen wird, startet also die Szene neu, in der sich die Schaltfläche befindet. Die neue Szene enthält einen neuen GameManager, dessen Awake() Instance erneut festlegt. Dadurch kommuniziert die neue Schlange mit dem neuen GameManager.
Aufgabe
MittelWenn die Schlange stirbt, wird ein „Game Over“-Fenster angezeigt, und „Nochmal spielen“ startet ein neues Spiel.
- Füge in
GameManagerusing UnityEngine.UI;,using UnityEngine.SceneManagement;,public GameObject gameOverPanel;undpublic Button playAgainButton;hinzu. public void GameOver()zeigt das Fenster an;void PlayAgain()lädt die aktive Szene erneut, und Start() fügt einen Listener zuplayAgainButton.onClickhinzu.Die-Methode vonSnakeruftGameManager.Instance.GameOver()auf.
Drücke „Spielen“, stoße irgendwo an und klicke auf „Nochmal spielen“: Ein neues Spiel beginnt. Drücke anschließend „Prüfen“.
Probier es selbst
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public Snake snake;
public GameObject foodPrefab;
public TMP_Text scoreText;
private Transform food;
private int score;
void Awake()
{
Instance = this;
}
void Start()
{
scoreText.text = "Score: 0";
food = Instantiate(foodPrefab).transform;
MoveFood();
}
public bool IsFood(Vector3 cell)
{
return cell == food.position;
}
public void Eat()
{
score++;
scoreText.text = "Score: " + score;
MoveFood();
}
void MoveFood()
{
List<Vector3> free = new List<Vector3>();
for (int x = -snake.edge; x <= snake.edge; x++)
{
for (int z = -snake.edge; z <= snake.edge; z++)
{
Vector3 cell = new Vector3(x, 0f, z);
if (!snake.Occupies(cell))
{
free.Add(cell);
}
}
}
food.position = free[Random.Range(0, free.Count)];
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Unity-Spiel: 3D-Snake
Übe selbstständig: Unity-Playground