You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 90 Next »


„ROCKET LAWNCHAIR!“ (Metal Slug 2)


Inhaltsverzeichnis



Das Team


TeammitgliedMatrikelnummerAufgabenbereich

Yannic Kühn

2382131Konzept, Coding
2380225Konzept, Coding, Art Design, 3D Modeling
Justus Boos2388000Konzept, Coding, Multiplayer
Tom Kalberg2382485Konzept, Level-, Art & Sound-Design, Dokumentation



Kurzbeschreibung


Runner's Rampage ist ein Partyspiel, bei dem sich 2-4 Spieler in einem Arena-ähnlichen Level mit Raketenwerfern bekämpfen. Last Man Standing - der letzte Überlebende gewinnt!



Walkthrough-Video




Das Spielprinzip

Nach dem Spielstart hat der Spieler im Hauptmenü/Startscreen die Möglichkeit, seinen Spielernamen zu ändern, einen öffentlichen oder privaten Raum zu erstellen, bereits erstellte Räume zu suchen oder einem Raum beizutreten. Sobald man sich in einem Raum befindet, hat man die Auswahl zwischen vier Charakteren: Blau, Grün, Schwarz und Rot. Wenn alle Spieler ihre Charakter ausgewählt haben, wird das Spiel gestartet und alle Spieler werden in dem Arenalevel gespawnt.

Nun gilt es, schnell zu reagieren! In der Arena sind mehrere Item-Pickups verteilt, hinter denen sich ein Raketenwerfer verbirgt. Mit Hilfe des Raketenwerfers kann man andere Spieler schnell und effektiv aus dem Level befördern. Die Spieler haben außerdem die Möglichkeit, sich mit Hilfe von Jumps, Dashes und Slides aus dem Staub zu machen und den Raketen  auszuweichen. Wer den Raketenwerfer einsammelt, hat daher nur theoretisch die Oberhand - denn auch dieser spawnt nach einer gewissen Zeit erneut. Jeder Spieler hat außerdem drei Lebenspunkte in Form von Herzen - man verliert einen Lebenspunkt, wenn man aus der Arena fällt. Ein chaotisches Katz- und Maus-Spiel, bei dem nur der letzte Überlebende gewinnt!



Download


Ein Download-Link folgt, sobald eine spielbarer Build des Spiels vorliegt. (smile)



Screenshots




Erste Ideen & Konzept

Beim ersten Brainstorming kristallisierte sich schnell heraus, dass wir alle gerne ein Spiel mit Online-Multiplayer kreieren möchten, da wir zum einen bisher nur wenig Erfahrung mit diesem Thema und den dazugehörigen Komponenten wie etwa Netcode, Serverinfrastruktur oder API sammeln konnten, zum anderen macht die aktuelle COVID-19-Situation es nicht gerade einfach, ein Spiel mit lokalem Multiplayer effektiv gemeinsam zu testen. Außerdem sind Offline-Multiplayerspiele eine aussterbene Art - heutzutage ein Multiplayerspiel ohne Onlinekomponente zu veröffentlichen, ist weder zeitgemäß noch besonders klug, gerade wenn man sein Produkt am Ende vielleicht sogar einmal vermarkten möchte.

Nach dem die Genre-Ideen, die von jedem aus der Gruppe in die Runde geworfen wurden, in mehreren (teilweise hitzigen) Diskussion abgewogen wurden, kamen wir letztendlich auf einen ersten gemeinsamen Nenner: Das Spiel sollte am Ende ein Jump ’n’ Run Partyspiel werden, bei dem mehrere Spieler um die Wette laufen und sich währenddessen mit Items bzw. Powerups bekämpfen. Wer zuerst das Ziel erreicht oder als letzter Spieler überlebt, gewinnt die Runde. Bei der Konzeptionierung haben wir uns hierbei von Spieletiteln wie z.B. Mario Kart, Mashed und vor allem Speedrunners inspirieren lassen.

Bei den Überlegungen bezüglich des Game Designs stand zuerst die Idee im Raum, das Spiel auf einer 2D-Basis zu erstellen. Somit könne man sich beim Design einer der drei Achsen gänzlich sparen und wäre bei der Erstellung von Assets auf Sprites statt Polygone angewiesen. Unity hat hierfür sogar einen eigenen 2D-Modus, der das Programmieren auf zweidimensionaler Ebene vereinfacht. Diese Idee haben wir jedoch letzendlich verworfen, da wir unsere bereits gesammelten Erfahrungen mit Unity 3D und der Erstellung und Animation von 3D-Assets mit Blender anwenden möchten. Die Entscheidung fiel also auf 3D-Grafik mit Low-Poly Assets, um den Gesamtaufwand im Rahmen zu halten und Teile der Assets selber erstellen zu können, ohne zu stark auf Assetpakete angewiesen zu sein.

Mario KartMario KartSpeedrunnersSpeedrunners




Umsetzung

Das Projekt bzw. Spiel wurde mit Hilfe von Unity erstellt - eine genaue Auflistung aller benutzten Tools und Assets findet sich weiter unten. Um den Leser nicht mit einer kompletten Schritt-für-Schritt Dokumentation unserer Arbeit an dem Projekt zu langweiligen, werden im folgenden einige Teilbereiche der Umsetzung, die wir für nennenswert halten, dargestellt bzw. erläutert.

Erstellung von Assets

Wie in unserem Konzept bereits erläutert, war es uns wichtig, unser Spiel auf 3D-Basis zu erstellen, um die Möglichkeit zu haben, selber mit Blender Assets zu erstellen. Es wurden daher u.a. das Playermodel, der Raketenwerfer inkl. Rakete, die Herzen für die Lebensanzeige und Teile der Leveldesigns selber in Blender erstellt. Für das Playermodel wurden außerdem die benötigen Animation für das Laufen, Springen, Dashen und Sliden angefertigt.



Multiplayer

Mit Photon Unity Networking (PUN) war es uns möglich, unser Spiel von Grund auf inkl. der gewünschten Netzwerkfunktionen zu programmieren. Mit Hilfe von PUN lassen sich in unserem Spiel Räume erstellen, denen man anschließend beitreten kann. Alle Spieler in einem Raum spielen dann im Netzwerk zusammen gegeneinander - dabei werden alle Aktionen wie Bewegung, Kollision, Schaden, usw. über das Netzwerk synchronisiert, sodass jeder Spieler "das gleiche sieht".



Erstes Level

  • ...
  • ...
  • ...


Devblog

  • Projekt in Unity erstellt und mit Collaborate für alle Gruppenmitglieder verfügbar gemacht
  • Basic Movement mit RigidBody funktioniert
  • Experimente RigidBody vs. CharacterController
  • Rudimentäres Testlevel zum Testing des Movements erstellt
  • Recherche und Tests mit verschiedenen Spiral Meshes
  • Erstes Low-Poly Charaktermodell in Blender erstellt und nach Unity exportiert
  • Erste Animationen (laufen, springen, rutschen) in Blender erstellt und nach Unity exportiert
  • MLAPI (Unity Multiplayer API) in Unity Projekt integriert
  • Dedicated Server Lösung getestet und wegen zu großem Aufwand wieder verworfen
  • Photon Realtime Networking implementiert
  • Erste Multiplayer-Tests mit mehreren Spielern
  • Multiplayer-Lobby mit mehreren Räumen implementiert
  • Animation over Network implementiert
  • Erstes UI-Design für Hauptmenü und Lobby
  • Charakterauswahl implementiert
  • Mehrere Multiplayer-Funktionstest
  • Recherche nach passenden Assetpacks und anschließendes Testing
  • Implementierung von ausgesuchten Assetpacks
  • Konzeptionierung, Design und Erstellen des ersten Levels
  • Umstieg von CharacterController auf RigidBody
  • Erweiterung des RigidBody Movement-Scripts, Implementierung eines "Dashes"
  • Weitere Low-Poly Charaktermodelle in Blender erstellt und nach Unity exportiert
  • Erste Low-Poly Itemmodelle (z.B. Rocket Launcher) in Blender erstellt und nach Unity exportiert
  • Weitere Experimente mit RigidBody Movement (Double Jump, etc.)
  • ItemHandler implementiert
  • Rocket Launcher modelliert und nach Unity exportiert
  • Rocket Launcher Funktion (aufnehmen und schießen) implementiert
  • Weitere Tests und Experimente mit Movement, Drag und Rigidbody
  • Experimente mit Procedural Generation (des Levels)
  • Projekt notgedrungen von Unity Collab auf Plastic SCM migriert
  • Konzept und Scope des Projekts verschoben und verkleinert
  • Neues Level erstellt (Desert)
  • Implementierung von GroupCamera und PlayerMarker
  • Etliche Anpassungen am UI vorgenommen
  • Erste Tests mit FEEL (Unity Addon für Feedback, Sound, usw.)
  • Reset Button (für Levelneustart) implementiert)
  • Rocketlauncher Finetuning
  • Movement Finetuning
  • Erste Tests zu Implementierung von Sound
  • Herz (für Lebenspunkte) in Blender modelliert und nach Unity exporiert
  • UI Update bei Verlust von Herzen implementiert
  • Cinemachine (FEEL) gefixed
  • Item Animation implementiert
  • Erste Soundeffekte implementiert
  • Weitere Soundeffekte und Musik implementiert
  • GameOver-State und -Screen implementiert
  • SFX für Raketenwerfer und Explosion implementiert

Herausforderungen

Wie bei den meisten Projektarbeiten kommt am Ende doch vieles anders, als man denkt - auch unser Projekt blieb von unerwarteten Herausforderungen oder Hürden nicht verschont. Im Folgenden werden diese weiter ausgeführt um u.a. ein deutlicheres Bild unserer Arbeit an dem Projekt zu schaffen und zumindest teilweise unser Endergebnis zu begründen


  • ...
  • ...
  • ...
  • ...



Ziele


In der folgenden Tabelle sind unsere ursprünglich geplanten Ziele in Form von Spielelementen aufgelistet und in "Must Have" bzw. "Nice To Have" unterteilt sowie mit der jeweiligen Priorität quantifiziert. Außerdem wurden der Status farblich markiert, sodass direkt ersichtlich ist, welche Ziele erreicht wurden und welche nicht.

Prio (0-10)Must HaveNice To Have
8

FERTIG Ein vollständiges Level

FEHLT Zwei oder mehr Level

6

FERTIG Items bzw. Powerups

FEHLT Fähigkeiten

9

FERTIG Kamera


6

FEHLT Highscore-System


5

IN ARBEIT Sounds & Musik


10

FERTIG 2-4 Spieler

ABGELEHNT > 4 Spieler

6

FERTIG Hauptmenü / Multiplayer-Lobby


6

FERTIG Start-Screen


6

IN ARBEIT Game-Over-Screen


6

FEHLT Einstellungen bzw. Settings


9

FERTIG Movement: Laufen

FERTIG Movement: Slide bzw. Dash

9

FERTIG Movement: Jump

ABGELEHNT Movement: Wall Jump

9

ABGELEHNT Movement: Double Jump


9

FERTIG Animationen


5

FEHLT Controller-Implementierung


7

IN ARBEIT Gameplay-Effekte

FEHLT Environment-Effekte



Zeitaufwand/Stundenrechnung


Wird aktuell in einer separaten Excelliste gepflegt und zu einem späteren Zeitpunkt in das Wiki übertragen.



Lessons Learned


Wird gegen Ende der Projektarbeit ausformuliert.



Tools

Im Folgenden noch eine vollständige Auflistung der verwendeten Tools, Unity-Plugins und Assets:

  • No labels