Spielercharakter
Ähnlich wie bei den Gegnern wird das Verhalten des Spielers über Skripte gesteuert. Besonders die Bewegung in Kombination mit der Kamera war aufwendig umzusetzen. Damit sich die Steuerung gut anfühlt, haben wir uns an typischen Umsetzungen aus der Spieleindustrie orientiert. Der Spieler besitzt ein eigenes Inventar mit dem er über die Benutzeroberfläche interagieren kann. Die Statuswerte des Spielers (z.B. Leben, Stärke, Geschwindigkeit ) verändern sich je nach Ausrüstung oder konsumierten Items. Das soll den Spieler dazu motivieren, verschiedene Spielweisen auszuprobieren. Zusätzlich kann der Spieler durch das Besiegen von Gegnern Erfahrungspunkte sammeln und seine Werte dadurch dauerhaft verbessern.
Eingabe und Kamera
Die Steuerung des Spielers erfolgt über das neue Unity Input System und orientiert sich am First-Person-Gameplay.
Für die meisten Aktionen wie Bewegung, Angreifen, Inventar öffnen usw. verwenden wir sogenannte InputActions
. Diese können direkt mit Tastatur- oder Gamepadeingaben verbunden werden.
Im Code werden die Eingaben wie folgt registriert:
input.Attack.performed += OnAttackPerformed;
input.OpenMap.performed += OnOpenMapPerformed;
openInventory.action.performed += OpenInventory;
Die Kamera wird direkt über die Mausbewegungen gesteuert und gleichzeitig wird der Charakter gedreht. Dabei ist die Kamera an ein separates Objekt playerOrientation
gebunden. Wenn der Spieler z.B. nach rechts schaut, wird auch seine Bewegungsrichtung angepasst. Drückt man W
(Vorwärts), bewegt sich der Charakter immer in Blickrichtung der Kamera.
Interaktion mit der Umgebung
Raycasting wird in unserem Spiel an vielen Stellen verwendet, nicht nur bei der Gegner-KI. Die Funktion sendet einen unsichtbaren Strahl aus einem gegebenen Ursprungspunkt in eine Richtung und prüft, ob dieser mit einem Objekt kollidiert.
Das nutzen wir unter anderem für:
- UI-Interaktionen: z.B. Anzeigen des Tooltip-Fensters
- Bei Fernkampfwaffen und um Kopftreffer zu erkennen
- Interaktion mit der Umwelt: z.B. das Öffnen von Türen, Einsammeln von Items
Animationen
Für den Spieler und die Gegner wurden eigene Animationen erstellt. Während Gegner in der Regel nur über eine Lauf- und Schlaganimation verfügen, haben wir beim Spieler etwas mehr Vielfalt eingebaut:
- Ausrüstungsanimationen
- Geh- und Rennanimationen
- Separate Animationen für verschiedene Waffentypen
Die Steuerung der Animationen erfolgt über den AnimatorController in Unity. Die Übergänge zwischen den Zuständen werden zur Laufzeit über Skripte durchgeführt.
Für die Bewegung verwenden wir einen Blend Tree, der je nach Eingabe flüssig zwischen den Animationen übergeht.
Der Animator ähnelt sehr einem Zustandsdiagramm. Man definiert dort alle relevanten Zustände und legt fest, bei welchen Bedingungen zwischen ihnen gewechselt wird, z.B. wenn der Spieler eine bestimmte Geschwindigkeit erreicht hat oder angreift.