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

Compare with Current View Page History

« Previous Version 51 Next »

Grundidee

Die Grundidee war die Entwicklung eines 2D Plattformers  im Stil der alten Metroid-Spiele. So sollen die Level nicht in sich abgeschlossen sein, sondern eher so, dass der Spieler zu einem späteren Zeitpunkt zurückkehren muss, um neue Wege zu erkunden. Dies soll den Spieler motivieren, die einzelnen Levelabschnitte genauer zu erkunden.
Als Motivation gelten dabei noch das Lösen von Rätseln und das Sammeln von Upgrades, um den weiteren Spielverlauf etwas zu vereinfachen. Der Spieler findet dazu ein Schwerkraftgerät, mit dessen Hilfe er um sich herum eine Art Blase erschaffen kann, in die er schwerelos ist. So kann der Spieler auch Orte erreichen, die normalerweise unerreichbar für ihn wären. Auch Objekte werden angezogen, sobald sie sich in dieser Blase befinden. Somit kann der Spieler ebenfalls Objekte erreichen, die sonst unerreichbar wären.

Die Hauptmotivation liegt darin, ein bestimmtes Ziel zu erreichen. In diesem Fall bedeutet das, dass der Hauptcharakter eine geliebte Person sucht, die sich auf einem verlassenen Raumschiff befinden soll.

Das verlassene Raumschiff ist dabei der Hauptschauplatz des gesamten Spiels und beinhaltet die verschiedenen Levelebenen, die der Spieler erkunden kann

Konzept

Pattform: PC

Genre: 2D Plattformer

Zielgruppe: Gewohnheitsspieler

Spielwelt: Science-Fiction- Weltraum

Gameplay / Motivation: Schwerkraft ein- und ausschalten, Rätsel lösen, Sammeln

  • Grundlegende Motivation: Finde deine geliebte Person
  • Auf dem Weg dorthin Rätsel lösen, um voran zu kommen
  • Sammeln von Informationen für die Story

Bedienung: Hauptfokus liegt zunächst auf Controller

Engine: Unity

Umsetzung und verwendete Software

Für die Erstellung eines 2D Spiels gibt es verschiedene Tools/Engines, wie zum Beispiel den Game Maker oder Unity. Letztendlich fiel die Entscheidung auf Unity. Eine der Hauptaspekte der Entscheidung war die bereits gesammelte Erfahrung mit dieser Engine und die unterstützte Programmiersprache C#, sodass nicht extra Zeit in dem Erlernen einer neuen Engine gesteckt werden musste.

Da wir nicht so viel Erfahrungen im Erstellen von Grafiken haben, haben wir uns dazu entschieden, das grundlegende Tileset für unser Spiel im Asset Store zu kaufen, sodass die Konzentration mehr auf die Erstellung der Mechaniken, Sounds und der Story liegen kann. Zur Versionskontrolle haben wir github verwendet.

Hier die Auflistung der verwendeten Software:

  • Unity
  • Github
  • Discord
  • Trello


Playthrough

Hier ein Playthrough des ersten Levelabschnittes.

ToDo: Video einfügen

Grafiken

Der Großteil der Grafiken kommt entweder aus dem in Unity integrierten Asset Store oder von der Webseite https://craftpix.net/ , welche die Grafiken teilweise kostenlos anbieten. Die Icons für die Controller Buttons stammen von https://opengameart.org/content/free-keyboard-and-controllers-prompts-pack

Das grundlegende Tileset:


 

Dieses Tileset stammt aus dem Unity Asset Store. 

Die UI Elemente:

    

Diese Icons werden im Startmenü und im Pause Menü eingeblendet, um dem Spieler die Steuerung zu erklären. Der X-Button erscheint auch im Spiel, wenn der Spieler mit einem Objekt interagieren kann. 



Die Spielwelt

Die Spielwelt wurde als sogenannte Tilemap erstellt, welche in Unity integriert ist. Um die Tiles auf die Tilemap zu bekommen, gibt es ebenfalls in Unity integrierten Tile-Palette, von denen man beliebig viele erstellen kann. Hier die zwei Tilepaletten, die für das Projekt erstellt worden sind:

 

Bei der ersten Tilealette handelt es sich um das normale Tileset. In der zweiten Tilepalette befinden sich sogenannte Rule-Tiles, welche extern in Unity eingebunden werden mussten, um diese zu erstellen. Mit diesen kann man die Tiles animieren und ebenfalls auf die Tilemap gezeichnet werden. Das hat den Vorteil, dass die animierten Tiles nicht einzeln als Objekte in die Spielwelt plaziert werden müssen.

Jedes Tileobjekt ist genau eine Unit groß. Bei einer Unit handelt es sich genau um ein Kästchen

 

Wenn z.B. ein einzelnes Tile eine Auflösung von 16x16 hat, müssen die Pixels Per Unit im Unity Editor ebenfalls auf 16 eingestellt werden.

Um alle Objekte mit Hilfe des Tile-Systems in Unity richtig platzieren zu können, mussten mehrere Tilemaps erstellt werden.

 

Die “Map” stellt dabei den Grundriss der einzelnen Levelebenen dar, mit denen der Spieler kollidieren kann. Für die Hintergründe selbst brauchte es ebenfalls extra Tilemaps, mit denen der Spieler nicht kollidieren kann. “Background-Image” stellt dabei den Hintergrund dar, während sich die “Background-Objects” direkt davor befinden.. Im “Foreground” befinden sich Tiles, die sich vor dem Spieler befinden. Desweiteren wurden für Leitern und Treppen ebenfalls eine eigene Tilemap erstellt, da für diese eine eigene Mechanik erstellt werden musste. So wird z.B. bei Berührung mit dem Tilemap Collider für die Leitern die Steuerung so verändert, dass der Spieler diese hoch- und runterklettern kann.




Der grobe Spielablauf

Beim Starten des Spiels befindet sich der Spieler im ersten Levelabschnitt. Dieser dient dazu, die grundlegenden Mechaniken des Spiels zu erlernen. Es handelt sich also um ein kleines Tutorial.

Zu Beginn ist der Spieler durch eine beschädigte Stelle ins Raumschiff gelangt, was den Alarm ausgelöst hat. Da die Luft hinausströmt, findet der Spieler sich in einem schwerelosen Vakuum wieder. Erst das Schließen der Tür stellt die künstlicher Schwerkraft des Raumschiffs her und der Spieler kann sich normal bewegen.

Als nächstes kommt der Spieler in einem Lagerraum. Da der ganze Raum mit Kisten blockiert ist, muss der Spieler durch einen Tunnel klettern. Auf der anderen Seite des Lagerraums findet er dann das Schwerkraftgerät, mit dem er “fliegen” kann.

Um in den nächsten Raum zu gelangen, muss der Spieler durch eine Art Lüftungsschacht fliegen. Während er in den Lüftungsschacht fliegt, kann der Spieler die rote Karte mit dem Schwerkraftgerät mitziehen. Diese braucht er, um in den nächsten Raum zu gelangen. Anschließend kommt der Spieler an einem Fahrstuhl vorbei, welcher aber nicht funktioniert, da keine Energie mehr vorhanden ist.

Der Spieler muss also erstmal weiter gehen und gelangt in einem Hangar. Dort kann er entweder oben oder unten weitergehen. Jedoch ist die Leiter nach oben zerstört, sodass er das Schwerkraftgerät einsetzen muss. Für den unteren Weg benötigt der Spieler einen Code, den er auf dem oberen Weg findet.

Außerdem erfährt der Spieler, dass er drei Nanoreperaturkits sammeln muss, um den Reaktor wieder in Gang zu bringen. Hat er dies geschafft, kann der Spieler den Fahrstuhl benutzen und gelangt in den 2. Levelabschnitt. Das Tutorial ist somit abgeschlossen.




Scripte/Programmierung

Ein Großteil der Arbeit war die Programmierung. Darunter fallen die Mechaniken wie z.B. das Schwerkraft-Feature sowie kleinere Funktionen (Steuerung, öffnen von Türen, betätigen der Hebel, reparieren des Reaktors, einsammeln von Gegenständen usw.) Auch das Ein- und Ausblenden von UI Elementen (Pause Menü, Batterieanzeige, Benutzen-Taste usw.) musste programmiert werden. Insgesamt gibt es XX Scripte in dem Projekt.

Da dieses Projekt im Rahmen eines zukünftigen Projekts weiterentwickelt werden soll, war es auch wichtig, die Scripte/den Code möglichst so zu erstellen, dass diese in Zukunft einfacher wiederverwendet bzw. erweitert werden können. Dies hat dann auch den Zeitaufwand der Programmierung erhöht.



Das Hauptfeature war die Schwerkraftmechanik. Dafür wurden zwei Scripts erstellt. Einmal das Script für das Schwerkraftgerät selbst. Dieses ist dafür verantwortlich, dass sich das Gerät ein- und ausschaltet und je nachdem den Stand der Batterie überprüft. Bei dem zweiten Script handelt es sich um den Bereich, der um den Spieler erschaffen wird. Dieser hat die Aufgabe, Gegenstände anzuziehen, die sich in dem Bereich befinden.

Ein weiteres Feature ist das Tür-System. Diese lassen sich über die verschiedenen Terminals bedienen. Für die einzelnen Türen gibt es ein Script, welches diese einfach öffnen und schließen lässt. Die Logik, unter welchen Bedingungen eine Tür geöffnet werden kann, steckt in den sogenannten Terminals. Während bei einem normalen Terminal ein einfacher Druck auf die Benutzen-Taste ausreicht, überprüft das KeyCardTerminal, ob der Spieler die benötigte Schlüsselkarte bei sich hat. Das LeverTerminal stellt die Hebel dar, welche immer eine Tür öffnen und gleichzeitig eine andere schließen. Das KeyPadTerminal erwartet einen Code vom Spieler, den dieser eingeben muss. Erst bei Eingabe des richtigen Codes öffnet sich die Tür. Ist der Code einmal korrekt eingegeben, kann die Tür jederzeit ohne erneute Eingabe geschlossen und wieder geöffnet werden.

Mithilfe des Dialog-Systems ist es möglich, dem Spieler Texte über einen Computer anzuzeigen. Somit erfährt er nach und nach, was auf dem Schiff vorgefallen ist. Mit der Benutzen-Taste kann der Spieler den “Dialog” schließen bzw. den nächsten Satz einblenden lassen.  




Fazit und Lessons Learned

Im Rahmen des Projekts konnten wir die Erfahrung machen, wie viel Arbeit in einem “einfachen” 2D Platformer stecken kann. Allein die Anzahl der Scripts für die Mechaniken wuchs immer weiter an. Auch merkten wir, dass uns trotz eines umfangreichen Tilesets aus dem Asset Store noch viele Grafiken und Animationen fehlten, sodass nach weiteren Grafiken recherchiert werden musste. Dadurch lernten wir, dass ein Grafiker im Team einen großen Vorteil bietet, da so alle Grafiken für das Spiel individuell erstellt werden können.

Deshalb haben wir den Fokus erstmal auf die Mechaniken, die Soundeffekte und dem Storytelling gelegt.

Im Folgenden noch ein paar Beispiele, auf die wir während des Projektes gestoßen sind:


Tilemap-Collider Problem

Die Map mit dem normalen Tilemap-Collider (links) und mit dem Composite-Collider (rechts)

   

Der Compoiste-Collider mit hinzugefügtem Physics Material 2D

 





Der normale Tilemap-Collider führte in der Anfangsphase dazu, dass der Spieler zwischen den einzelnen Tiles hängen bleiben konnte. Dies trat sehr zufällig auf. Nach einer Recherche wurde klar, dass die Behebung des Problems sehr einfach ist. Bei dem Tilemap-Collider muss einfach der Haken bei Used By Composite gesetzt werden. Anschließend kann der Composite-Collider als Komponente hinzugefügt werden. Anschließend wird automatisch ein Rigidbody 2D hinzugefügt, bei dem der Body Type auf Kinematic gestellt werden muss, da die Tilemap sonst eine Schwerkraft hat und nach unten fällt.  Dieser sorgt dafür, dass nicht mehr jedes einzelne Tile einen Collider hat, sondern die gesamte Tilemap als Collider zusammengefasst wird. So kann der Spieler nicht mehr zwischen den einzelnen Tiles hängen bleiben. 

Ein weiteres Problem bestand aber weiterhin: Sobald der Spieler gegen eine Wand gesprungen ist, blieb er dort hängen, solange man sich in Richtung der Wand bewegte. Aber auch dafür war die Lösung letztendlich einfach. Man benötigte nur ein Physics Material 2D, welches in Unity sehr einfach erstellt werden kann. Bei diesen setzt man einfach die Friction und Bounciness auf 0 und fügt dieses dem Composite-Collider hinzu. 

Problem mit den Stair-Collider

Treppen mit normalen Tilemap-Collider (links) und mit Composite-Collider (rechts)

 

Collider für die einzelnen Treppen einfügen

Einfügen eines Physic2D Materials für den Stair-Collider, damit Spieler nicht zu schnell die Treppe hoch sprintet.

 



Im späteren Spielverlauf sollen auch noch Treppen eingefügt werden, die ebenfalls im grundlegenden Tileset enthalten sind. Bei den Treppen gab es allerdings das Problem, dass sowohl der Tilemap-Collider als auch der Composite-Collider verhindern, dass der Spieler die Treppe betreten kann, ohne zu springen. Er würde vor jeder Stufe hängen bleiben. Die einfachste Lösung war es, für die beiden Treppenarten (steile und flache Treppen) für jede Richtung einen Edge-Collider zu erstellen und manuell einzufügen. So haben die Treppen eine eigene Tilemap, jedoch ohne eigenen Tilemap-Collider

Ein weiteres Problem war dann, dass der Spieler die Treppen zu schnell hochgekommen ist, sodass er am Ende der Treppe hoch "gesprungen" ist. Um dieses Problem zu lösen, wurde für den Edge-Collider ein Physics Material 2D mit dem Namen Stairs_Friction erstellt. Der Spieler verliert dadurch je nach eingestelltem Friction Wert die Geschwindigkeit auf der Treppe. Mit einem Wert von 2 konnte zunächst das beste Ergebnis erzielt werden, um das Problem zu lösen.




Zeitaufwand

Im Folgendem eine Übersicht der aufgewendeten Stunden.



Person

Bereich

Stunden gesamt

T. Lamping

Organisation

  • Teambesprechung
  • Doku
  • Sonstiges

30

  • 15
  • 10
  • 5

Grafik und Design

  • Mapping 1. Abschnitt
  • Schwerkrafteffekt
  • Recherche nach Grafiken

15

  • 5
  • 5
  • 5

Programmierung

  • Erster Prototyp
  • Schwerkraftmechanik
  • Sonstige Mechaniken
  • UI
  • Bugfixes
  • Code Cleaning

135

  • 10
  • 35
  • 20
  • 15
  • 30
  • 25




  • No labels