Skip to content

Architektur

DidiSkywalker edited this page Oct 27, 2022 · 2 revisions

Unsere Architektur setzt sich aus zwei Schichten zusammen.
Zuerst haben wir die BaseScene. Diese Szene ist immer geladen und hält und verwaltet globalen Zustand. Darunter befindet sich die Szene die aktuell sichtbar ist. Optionen sind Hauptmenu, Levelszenen und Minigameszenen.
Screenshot der Szenenübersicht zeigt die Elemente der BaseScene, und dass die MainMenuScene parallel geöffnet ist.


BaseScene

Wie oben erwähnt ist die BaseScene immer geladen. Die aktive Szene wird nebenher ausgewechselt, aber die BaseScene bleibt gleich. Das ist perfekt um globalen Zustand zu verwalten, deshalb befinden sich hier Clippy, ein SceneLoader, StateManager und das Artefaktbuch.

SceneLoader

Der SzeneLoader ist dafür zuständig die aktive Szene durchzuwechseln, wenn zum Beispiel ein Minigame gestartet wird, oder zum Hauptmenu zurückgekehrt werden soll. Umgesetzt ist er Skript Assets/Scripts/Base/SceneLoader.cs, und das GameObject hält Listener für die Channel

  • MinigameSuccessEvent_Channel
  • LoadMinigameEventChannel
  • LoadLevelEventChannel
  • LoadMenuEventChannel

Außerdem feuert er Events in den MinigameSceneUnloadedEvent_Channel.

StateManager

Der StateManager verwaltet den im State Singleton gehaltenen Zustand:

    public class State
    {
      ...
        public MinigameSO ActiveMinigame;
        public MinigameParams MinigameParams;
        public SceneReference ActiveLevel;
      ...
    }

Dafür hält er Listener für die Eventchannel:

  • LoadMinigameEventChannel
  • MinigameSceneUnloadedEvent_Channel
  • LoadMenuEventChannel
  • LoadLevelEventChannel

Wird ein Level gestartet, hält der Zustand eine Referenz auf das aktuell aktive Level.
Wird ein Minigame gestartet, hält der Zustand das aktive Minigame und seine Parameter. Das Minigame greift auf diese auch über den Zustand zu.
Umgesetzt ist der StateManager im Skript Assets/Scripts/Base/StateManager.cs


Aktive Szene

Die aktive Szene ist die, die gerade zu sehen ist und mit welcher der Spieler interagiert. Zu Start des Spiels natürlich das Hauptmenu.

MainMenu

Unser Hauptmenu zeigt ein Bücherregal mit Büchern die unsere Level Troia I-IX repräsentieren. Klickt man eines der Bücher startet das entsprechende Level.

Levelszene

In der Levelszene sieht man das ruinierte Troia. Die Aufgabe ist nun, es wieder aufzubauen. Dafür kann man auf die Gebäuderuinen klicken und ein Minispiel spielen. Schafft man es, baut sich das Gebäude wieder auf.
Wird ein Minispiel gestartet ersetzte diese Szene die Levelszene komplett. Deshalb enthält die Levelszene ein DontDestroyOnLoad GameObject auf welchem das CityState Skript den aktuellen Zustand des Levels speichert. Dieses GameObject bleibt erhalten wenn die Levelszene zerstört und wieder geladen wird. Hier ist zum Beispiel definiert für welche Gebäudegruppen welches Minispiel gespielt wird:
Screenshot des CityState Inspektors zeigt wie Gebäudegruppen Minispiele und ihre Parameter zugewiesen werden.
Die Gebäude besitzen ein Building Skript, welches sie einer Gebäudegruppe zuweist und wenn geklickt den CityState das entsprechende Minispiel starten lässt.

Minigameszene

Wird ein Minispiel gestartet, ersetzt die Minigameszene die Levelszene. Minigames sind dann frei wie sie Zustand halten und generell funktionieren während sie aktiv sind. Wenn sie fertig gespielt sind, werfen sie ein Event im MinigameSuccessEvent_Channel, wodurch der SceneLoader die Szenen wieder wechselt.

Clone this wiki locally