Panels ein- und ausblenden
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 9 von 60.
Ein Panel ist ein UI-Bild, das oft über den gesamten Bildschirm gezogen ist und Schaltflächen sowie Texte als untergeordnete Elemente enthält. SetActive(false) auf dem Panel blendet es samt allem darin aus, und seine Schaltflächen können nicht angeklickt werden, solange es ausgeblendet ist. Solange es angezeigt wird, fängt sein Bild die Klicks ab, die für Elemente darunter bestimmt sind. Daher können die Schaltflächen hinter einem bildschirmfüllenden Panel nicht gedrückt werden. Diese Karte wird über eine Schaltfläche in der Ecke geöffnet und über eine Schaltfläche auf der Karte geschlossen:
public GameObject mapPanel;
public Button mapButton;
public Button closeButton;
void Start()
{
mapPanel.SetActive(false);
mapButton.onClick.AddListener(() => mapPanel.SetActive(true));
closeButton.onClick.AddListener(() => mapPanel.SetActive(false));
}Panels lassen sich leichter bearbeiten, wenn sie angezeigt werden. Daher werden Szenen oft mit eingeblendeten Panels gespeichert und Start() blendet sie aus. Platziere das Skript, das ein Panel öffnet, nicht auf diesem Panel: Ein inaktives GameObject erhält weder Start() noch Update(). Daher würde ein Skript auf einem ausgeblendet gespeicherten Panel seine Schaltflächen niemals verbinden. Das Canvas oder ein Spielmanager-Objekt, die aktiv bleiben, eignen sich gut dafür. mapPanel.activeSelf gibt an, ob das Panel aktiv ist, und mapPanel.SetActive(!mapPanel.activeSelf) schaltet es um.
Aufgabe
EinfachFüge dem Wiesenspiel ein Menü hinzu: Schreibe Start() in Menu.cs.
- Blende
menuPanelundhelpPanelmitSetActive(false)aus. menuButtonzeigt das Menü an und setztmover.enabled = false;resumeButtonblendet es aus und setztmover.enabled = true.helpButtonblendet das Menü aus und die Hilfe ein;backButtonmacht das Gegenteil.
Drücke „Spielen“ und öffne das Menü: Der Spieler kann erst wieder laufen, wenn du „Fortsetzen“ wählst. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
using UnityEngine.UI;
public class Menu : MonoBehaviour
{
public GameObject menuPanel;
public GameObject helpPanel;
public Button menuButton;
public Button resumeButton;
public Button helpButton;
public Button backButton;
public PlayerMover mover;
void Start()
{
// Blende beide Panels aus und verknüpfe dann Menu, Resume, Help und Back
}
}
Alle Lektionen in Echte Spiele entwickeln
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der BankÜbe selbstständig: Unity-Playground