Panels ein- und ausblenden
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 9 von 56.
Ein Panel ist ein UI-Bild, das oft über den ganzen Bildschirm gestreckt ist und Schaltflächen und Texte als untergeordnete Elemente enthält. SetActive(false) auf dem Panel blendet es mitsamt 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 gedacht sind. Daher können die Schaltflächen hinter einem Vollbild-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. Deshalb werden Szenen oft mit eingeblendeten Panels gespeichert, die dann von Start() ausgeblendet werden. Platziere das Skript, das ein Panel öffnet, nicht auf diesem Panel: Ein inaktives GameObject erhält weder Start() noch Update(). Ein Skript auf einem Panel, das ausgeblendet gespeichert wurde, würde seine Schaltflächen also nie einrichten. Das Canvas oder ein Game-Manager-Objekt, die aktiv bleiben, eignen sich gut dafür. mapPanel.activeSelf gibt an, ob das Panel aktiv ist. Mit mapPanel.SetActive(!mapPanel.activeSelf) wird sein Zustand umgeschaltet.
Aufgabe
EinfachDas Wiesenspiel braucht ein Menü. Menu.cs befindet sich auf dem Canvas (HUD), und die Szene verknüpft seine Felder. Beide Bereiche sind in der Szene aktiviert, damit sie sich einfach bearbeiten lassen. Schreibe Start() so, dass:
- Beim Start des Spiels
menuPanelundhelpPanelausgeblendet sind. menuButtondas Menü öffnet und der zugehörigeresumeButtones schließt.helpButtonauf dem Menübereich diesen durch den Hilfebereich ersetzt undbackButtonauf dem Hilfebereich zurückwechselt.- Der Spieler nicht laufen kann, solange das Menü geöffnet ist: Das Skript
moverwird beim Öffnen des Menüs deaktiviert und wieder aktiviert, wenn Resume es schließt.
Drücke Play, laufe herum, öffne das Menü und dessen Hilfe und drücke dann Check.
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()
{
// Beide Panels ausblenden und dann Menu, Resume, Help und Back verknüpfen
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Echte Spiele entwickeln
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons 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