Fortschrittsbalken: Varianten durch Vererbung
Kommen Eigenschaften nur in manchen Objekten vor, können diese durch abgeleitete Klassen realisiert werden. Dadurch reduzieren sich Speicher und Verwaltung auf das tatsächlich Nötigste.
Script ableiten
- Klicke mit in Project und wähle , um ein neues Script zu erzeugen.
- Nenne das Script
ObjektMitTitelUndFortschritt
. - Doppelklicke auf dieses neue Script, um es in Visual Studio zu öffnen.
- Ändere
ObjektMitTitelUndFortschritt.cs
wie folgt:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjektMitTitelUndFortschritt : ObjektMitTitel
{
public float fortschritt = 0f;
}
Instanz austauschen
- Wähle das Restaurant-Objekt in der Hierarchy aus.
- Ziehe das Script
ObjektMitTitelUndFortschritt
aus Project in den Inspector, so dass das Script unterhalb des bisherigen ScriptsObjektMitTitel
platziert wird. - Kopiere im Inspector die Werte für Titel und Icon aus
ObjektMitTitel
in die gleichnamigen Eigenschaften desObjektMitTitelUndFortschritt
. - Setze zudem Fortschritt = 0.3.
- Klicke im Inspector mit auf den Titeltext ObjektMitTitel und wähle .
- Drücke Strg+P, um das Projekt zu starten und prüfe, dass alles funktioniert wie bisher.
Fortschrittsbalken im UI anlegen
- Wähle das Canvas-Objekt in der Hierarchy aus und füge über ein Bild der Szene hinzu.
- Nenne das neue Objekt um zu Fortschrittsbalken.
- Verwende das Rect Tool (Taste T ), um den Balken in Größe und Position anzupassen.
- Füge über Fortschritt. ein weiteres Bildobjekt hinzu und ändere den Namen zu
- Ziehe in der Hierarchy das Objekt Fortschritt auf das Objekt Fortschrittsbalken, um es unterzuordnen.
- Ändere im Inspector die Werte im Abschnitt ▾Rect Transformwie folgt:
- ▾ Anchors Min X = 0 und Min Y = 0, sowie Max X = 1 und Max Y = 1
- Pivot X = 0 und Y = 0.5
- Left = 0, Top = 0, Right = 0 und Bottom = 0
Hinweis: Die Beschriftung der Positions- und Größen-Felder ändert sich eventuell beim Ändern der Anchor- und Pivot-Werte.
Mit diesem Aufbau kannst Du nun sehr bequem den Scale X-Wert nutzen, um die Prozentdarstellung des Balkens relativ zum Layout zu steuern.
Fortschrittsbalken im Code einbauen
- Füge in
EigenschaftenZeichner.cs
folgende Felder ein:
public RawImage fortschritt;
public RawImage fortschrittsBalken;
Prozentwert setzen, mit Typ-Prüfung und Type-Cast
- Ändere in
EigenschaftenZeichner.cs
zudem diezeichneObjekt
-Methode wie folgt:
public void zeichneObjekt(ObjektMitTitel dasObjekt)
{
if (dasObjekt == null) // Kein Objekt -> leerer Text
{
textName.text = "";
icon.enabled = false;
fortschrittsBalken.gameObject.SetActive(false);
}
else // Konkretes Objekt -> dessen Eigenschaften zeichnen
{
textName.text = dasObjekt.titel;
icon.texture = dasObjekt.icon;
icon.enabled = (dasObjekt.icon != null);
if (dasObjekt.GetType() == typeof(ObjektMitTitelUndFortschritt))
{
Vector3 neueGroesse = new Vector3(1f,1f,1f);
neueGroesse.x = ((ObjektMitTitelUndFortschritt)dasObjekt).fortschritt;
fortschritt.GetComponent<RectTransform>().localScale = neueGroesse;
fortschrittsBalken.gameObject.SetActive(true);
}
else //kein ObjektMitTitelUndFortschritt
{
fortschrittsBalken.gameObject.SetActive(false);
}
}
}
Szenenobjekte zuweisen
- Wähle das Restaurant-Objekt in der Hierarchy aus und setze im Inspectorden Wert ▾ObjektMitTitelUndFortschritt Fortschritt = 0.5.
- Wähle das Canvas-Objekt in der Hierarchy aus und setze im Inspectorden Wert ▾Eigenschaftenzeichner Fortschritt auf das Fortschrittobjekt der Szene.
- Wähle das Canvas-Objekt in der Hierarchy aus und setze im Inspectorden Wert ▾Eigenschaftenzeichner Fortschritts Balken auf das Fortschrittsbalkenobjekt der Szene.
Ergänzung: Zu Beginn alles Verstecken
- Erweitere in
EigenschaftenZeichner.cs
das Awake-Ereignis:
public void Awake()
{
zeichneObjekt(null); //zu Beginn alles ausblenden
EventBus.bus.beiObjektMitTitelAenderung += zeichneObjekt; // Im Eventbus registrieren, dass die oben definierte Funktion zeichneObjekt aufgerufen wird.
}
Anhänge
Die hier gezeigten Lektionen sind eine Auswahl von Inhalten aus mehreren verschiedenen kostenpflichtigen Kursen. Um alle Inhalte zu sehen, müssen mehrere Kurse gekauft werden. Änderungen und Aktualisierungen der Kursinhalte werden auf dieser Seite möglicherweise nicht oder nicht sofort dargestellt. Die kostenpflichtigen Udemy-Kurse enthalten neben den Videos auch Übungen, Textartikel, weitere Materialien, sowie ein Support-Forum für Fragen. Vereinzelt kann eine Lektion im mehreren Kursen gleichzeitig enthalten sein. Wenn etwas unklar ist, stelle Deine Frage per E-Mail an rene@gamedev-profi.de .