GAMEPLAY

Tony (der Spieler) beschützt sein Feld vor aggressiven Raben, die seine magischen Pflanzen attackieren. Dabei wird ihm von einem Helfer geholfen.

Man läuft durch das Level, sammelt Wasser auf und bewässert die Pflanzen.

UMSETZUNG - Gameplay

Der Spielercontroller ist eine einfache, abgewandelte, Version des Standard UE5 Third-Person-Controllers.

Um die Interaktionen zu ermöglichen, kommt ein minimales Interaktionssystem zum Einsatz.

Dabei gibt es zwei Grundklassen (BP_Waterable und BP_WaterSource), die in Zusammenhang mit einem „Inventar“ (float für den Wasserstand) das Bewässern ermöglichen.

Es war unser Ziel, UI-Elemente so gut wie möglich zu vermeiden.

Die Pflanzen brauchten also eine Art und Weise, klar und deutlich zu zeigen, was ihr Zustand ist.

Umgesetzt ist das mithilfe von Beleuchtung und Farbwechsel. Die Pflanze interpoliert basierend auf ihrem jetzigen Status zwischen Zwei extremen, die man im Editor definieren kann.

UMSETZUNG - Helfer

Es gibt insgesamt 8 Pflanzen, die konstant Aufmerksamkeit benötigen.

Das wird nach sehr kurzer Zeit anstrengend, weshalb es einen Helfer gibt.

Meet Steve:

Steves Aufgaben sind einfach:
1. Bewässere die Pflanzen
2. Verscheuche die Vögel

Um das zu erreichen, verwenden wir einen AI Agent, der vom Blueprint gesteuert wird.

Anfangs war es der Plan, die Helfer-KI mit einem Behaviour-Tree umzusetzen, aber das Behaviour ist einfach genug in Blueprints zu programmieren, dass ich mich dagegen entschieden habe.

Um zu finden, welche Pflanze gerade dringend bewässert werden muss, durchläuft der Helfer vor der Pfadfindung alle Pflanzen im Level und sucht die höchste Differenz zwischen max_water und current_water heraus.

Sobald diese Pflanze dann bewässert ist, wird der Pfad mithilfe des selben Approaches zur nächsten Wasserquelle gesetzt (nur diesmal nicht auf Wasserstand sondern auf Distanz bezogen)

Überreichend wird das von einem Cast gemanaged. Es sind auch kurze Delays eingebaut, um den Actor so wirken zu lassen, als würde er die Aktionen langsam durchführen

Dieses Behaviour sieht dann folgendermaßen aus (gelb-grüne Linie zeigt Ziel)

UMSETZUNG - Vogelschwarm

Der Vogelschwarm funktioniert unter dem Prinzip Boids. Im allgemeinen werden Boids durch eine Steuereinheit kontrolliert, indem 3 Vektoren zusammen gerechnet werden und ein Endgültiger Vektor errechnet wird.

Erst müssen die Boids erstellt werden.

Die Boids Beinhalten ein skeloton-mesh und basis Informationen.

Daraufhin werden diese Gespawnt.

Um einen Schwarm zu erzeugen müssen Cohesion, Alignement und Separation im Boid-Manager errechnet und verrechnet werden um Eine Finale Velocity zu erhalten. Heist die Vögel sollen nicht aneinander stoßen, gleichzeitig nicht zu weit auseinander Fliegen und möglichst in die gleiche Richtung fliegen.

Zu diesem Zeitpunkt hat man einen Ziellosen Schwarm als haben wir uns dazu entschieden einen Leitvogel zu verwenden an dem sich der Boid Schwarm orientiert.

Dieser sucht sich dan ziele und fliegt samt Schwarm dort hin.

Die Schwierigkeit bestand bei den Boids meist bei der Cohesion, da diese sehr empfindlich ist. Daher haben wir jeden Vector Pfeil via einem Draw Debug Arrow anzeigen lassen um besser zu verstehen wie diese funktionieren und die stärke Visuell zu erkennen.

UMSETZUNG - Art

Damit wir uns auf die Programmierung und Umsetzung des Spiels fokussieren konnten, haben wir die Entscheidung getroffen, so wenig Assets wie möglich zu erstellen.

Damit wir dennoch ein detailliertes und schönes Environment haben konnten, ist das Level klein gehalten. 

Das ganze Level ist dabei eine Halbe Default-Landscape-Size.

Um die Kanten der Landscape zu verdecken, kommen viele Steine und Klippen zum Einsatz. Als Skybox dienen mehrere Cylinder mit einer „Mountain“ Textur. Durch die verschiedenen Größen ergibt sich auch ein gewisser Parallax effekt ähnlich dem der Source Engine 3D-Skybox.

Zuerst wollten wir das Level bei Tag haben, jedoch war es schwierig das Lighting gut umzusetzen. Nun ist das Level in der Nacht.

Beauty Shots