Start Magazin Wie macht man eigentlich ein Spiel? – Teil 5

Wie macht man eigentlich ein Spiel? – Teil 5

201
0
Teilen

Im letzten Teil hatten wir uns mit der Gravitation, Collidern und der Fortbewegung unseres Aliens beschäftigt. Heute widmen wir uns der Spiel-Kamera, erklären was es mit der Zeit in einem Spiel auf sich hat und erstellen den ersten Level.

Die Spiel-Kamera

Mit der Kamera ist im Grunde die Sicht des Spielers auf das Spiel gemeint. Stell dir dazu am Besten ein Autorennen vor: Du kannst dein Auto einmal aus der Cockpit-Sicht spielen, oder aber aus der Verfolgungssicht bzw. aus der Perspektive schräg über dem Fahrzeug. Für jede dieser Sichtweisen wird eine eigene Kamera erstellt.

Und so verhält es sich auch bei unserem Spiel: Wir haben einmal die Entwicklungsumgebung, in der wir als Entwickler in dem Spiel herumscrollen können, wie es uns beliebt. Und dann gibt es noch die Spielersicht. Hier haben wir für die Spieler-Kamera z.B. festgelegt, dass diese das Spiel für den Spieler in einer Auflösung von 1080×1920 darstellen soll. Außerdem haben wir ein kleines Skript geschrieben und der Kamera als Komponente hinzugefügt. Dieses sagt der Kamera, dass sie den Spieler immer im Zentrum behalten soll. Damit stellen wir sicher, dass die Kamera das kleine Alien verfolgt und das Alien niemals aus der Kamera verschwindet.

Oben haben wir die Entwicklersicht und unten sehen wir die Kamera-Vorschau, wie sie am Ende der Spieler sehen wird.

Ein weiterer riesiger Vorteil von Game Engines ist, dass diese die Spiele vollkommen automatisch auf die richtige Displaygröße skalieren. Es gibt tausende von verschiedenen Smartphones mit unterschiedlichen Displaygrößen und -auflösungen. Entwickelt man nativ muss man selbst dafür sorgen, dass das Spiel auf jedem Smartphone ordentlich dargestellt wird. Diese Arbeit wird uns hier von Unity3D fast gänzlich abgenommen.

Zeit ist alles (Frames)

Jeder von uns kennt ja von früher noch das Daumenkino. Durch das schnelle Durchblättern des Daumenkinos sieht es für uns so aus, als ob sich die Figuren darin flüssig zu bewegen scheinen. Tatsächlich aber werden einfach nur einzelne Bilder der Reihe nach durchgespielt.

Und genauso verhält es sich bei Computerspielen: Jedes einzelne Bild, welches auf dem Smartphone-Display (oder Monitor) dargestellt wird, nennt man Frame. Der Prozess des Zeichnens wiederum nennt man Rendern. Unity3D (sowie alle anderen Game Engines) spielen diese einzelnen Frames also einfach sehr schnell hintereinander ab. Damit ein Spiel nun aber flüssig läuft, müssen mindestens 30 Frames pro Sekunde (fps) dargestellt werden. Das reicht dann für einfache Strategiespiele bzw. weniger actionreiche Games. Aber aufwändige Rennsimulationen oder Egoshooter würden bei 30 fps anfangen zu ruckeln. Daher ist es hier besser auf 50-60 fps zu setzen.

Der erste Level

Bevor wir mit dem Levelbauen anfangen, möchte ich kurz noch etwas ausholen. Es gibt nämlich verschiedene Vorgehensweisen Level zu bauen. Zum Einen kann man das per Hand machen und zum Anderen kann man auf prozedurale Levelgenerierung setzen.

Möchtest du z.B. einen Endlos-Runner entwickeln und planst für diesen mehrere hundert Level, so artet es in richtig viel Arbeit aus, solltest du jeden einzelnen Level per Hand erstellen wollen. Hier kommt dann die prozedurale Levelgenerierung ins Spiel.

Die prozedurale Levelgenerierung

Hierbei programmiert man sich einen Mechanismus und sagt diesem, der erste Level soll z.B. aus 20 Plattformen bestehen. Eine Plattform wiederum besteht aus sagen wir mal 20 einzelnen Kacheln.

Eine Plattform mit mehreren Strassenkacheln. Hier ein Bildausschnitt mit 3 Kacheln.

Nun gibt man noch an, wie viele Gefahren auf einer Plattform existieren sollen. Gefahren können hier einmal Gegner sein, oder Fallen, spitze Stacheln auf dem Boden, oder eben eine Schlucht. Solch einen Mechanismus kann man beliebig kompliziert gestalten. Ist er aber erst einmal fertig hat man die Möglichkeit in kürzester Zeit eine Unmengen an neuen Level zu generieren. Als Entwickler legt man sich neue Gefahren einfach als eine Art Entwurf in seinem Projekt ab. Und diese Entwürfe gibt man dem Mechanismus dann einfach mit, möchte man z.B. neue Gegner bzw. Gefahren hinzufügen wollen.

Der Nachteil der prozeduralen Levelgenerierung ist, dass man in der Individualität der einzelnen Level eingeschränkt ist. Man hat sich quasi eine Vorlage für alle Level erstellt und diese gibt vor, wie die Level auszusehen haben.

Level per Hand erstellen

Hier kommt es natürlich in erster Linie darauf an, wie aufwändig dein Spiel werden bzw. wie viele Level es letztendlich haben soll und wie groß dein Entwicklungsteam ist. Da wir nur ein kleines Casual-Game entwickeln und wir keine große Entwicklungsschmiede sind machen wir für den Anfang erst einmal einige wenige Level. Falls das Spiel im Play Store Fuß fassen kann und man einen Trend sieht, dass es viele Leute herunterladen und spielen, können wir später dann noch weitere Level hinzufügen. Wir gehen hier also erst einmal nach dem Minimalprinzip vor und wollen nicht mit Kanonen auf Spatzen schießen. Das bedeutet aber nicht, dass wir das Spiel unfertig veröffentlichen. Jeder von uns erstellte Level wird komplett fertig, getestet und durchdesigned sein.

Wir erstellen uns in unserem Unity-Projekt nun eine neue Szene. Als Szene wird in Unity jeder einzelne Level bezeichnet. Nun erstellen wir alle Elemente, die wir in unserem Level haben möchten genau so, wie wir es mit dem Alien in den vorigen Kapiteln getan haben. Die Reihenfolge bzw. die Anordnung auf unserem Spielfeld ist hierbei erst einmal vollkommen egal, denn wir wollen alle Elemente erst einmal als Entwürfe in unserem Projekt ablegen. Diese können wir dann später beliebig oft in unserem Projekt verwenden. Dazu dann aber später mehr.

Wir erstellen uns Entwürfe von Planeten, dem Alien, Asteroiden, Felsen und einem Ufo als Gegner.
Auch Sterne erstellen wir als Entwurf. Hier noch mit transparentem Hintergrund.

Haben wir alle Elemente erstellt, geht es nun los. Zuerst sagen wir der Kamera, dass der Hintergrund im Spiel schwarz sein soll. Denn der Weltraum ist nunmal meistens schwarz ;-). Anschließend fügen wir so viele von unseren Sternen-Entwürfen hinzu, sodass unser Level damit komplett abgedeckt ist.

Die Sterne nun mit dem schwarzen Hintergrund.

Ist das erledigt fügen wir unseren Spieler hinzu sowie den Planeten Erde als Startplanet.

Alles beginnt auf der Erde.

Jetzt starten wir unser Spiel doch einfach mal. Das Alien läuft auf dem Planeten. Die Skripte für die Erdanziehungskraft und dass das Alien auf dem Planeten läuft haben wir natürlich vorher bereits ausprogrammiert und dem Alien bzw. dem Planeten als Komponenten hinzugefügt.

Wie geht es nun weiter? Wir möchten gerne, dass das Alien die Planeten selbst erzeugen kann. So kann der Spieler dann bestimmen, in welche Richtung er sich mit dem Alien bewegen möchte. Hierzu erstellen wir oben, unten, links und rechts des Planeten ein kleines Element, dass das Alien durch einen einfachen Sprung erreichen kann. Dieses Element startet dann die Routine zum Erzeugen eines neuen Planeten.

Der Spieler muss per Sprung die grünen Elemente treffen, dann wird ein neues Planet erzeugt.

Damit das aber nicht zu langweilig aussieht erstellen wir hierfür Spezialeffekte.

Special Effects

In Unity existiert ein Partikelsystem. Dies ist ein System, mit dem man sich selbst Effekte bauen kann. Das ist im Grunde gar nicht so kompliziert, erfordert aber etwas Einarbeitungszeit. Möchte man sich etwas Zeit sparen kann man sich hier auch gerne einmal im Unity Asset Store umschauen. Hier gibt es eine Vielzahl an hervorragenden Grafiken, Sounds, ParticleEffects, Skripte, usw. Viele davon sind kostenlos und dürfen im eigenen Projekt verwendet werden. Andere wiederum kosten Geld. Wir bedienen uns für unser Spiel ebenfalls aus dem Unity Asset Store:

Effekt mit dem das Alien Planeten erzeugen kann.
Eine Galaxie, mit der man zum nächsten Level gelangt, wenn man in deren Mitte fliegt.
Eine Sonne als Hindernis.

Wir setzen noch ein paar weitere Effekte in unserem Spiel ein, aber das hier sind die Eindrucksvollsten. Nun haben wir alle Elemente in unserem Spiel als Entwürfe angelegt. Als Nächstes fügen wir sie in unser Spiel ein, ordnen sie und bauen unsere ersten Level:

Beim ersten Level soll der Spieler erst einmal die Steuerung kennenlernen. Daher gibt es hier nur einen Startpunkt und ein Ziel.

Der erste Level. Ein Startpunkt und ein Ziel, das wars.

Beim zweiten Level fügen wir noch eine Sonne hinzu und erhöhen die Entfernung zwischen Start und Ziel.

Der zweite Level mit größerer Entfernung.

Später kommen dann noch Ufos als Gegner hinzu, die vorgegebene Wegpunkte abfahren.

Gegner mit Wegpunkten.

Jedem Level spendieren wir nun links oben in der Ecke noch einen Pfeil, der ständig anzeigt, in welcher Richtung sich das Ziel befindet. So weiß der Spieler immer ganz genau, in welche Richtung er sich bewegen muss. Außerdem gibt es noch einen Pause-Button und eine Anzeige, wie viele Planeten man bisher erzeugt hat.

Eine Richtungsanzeige und eine Art Punktesystem, wie viele Planeten man erzeugt hat, bis man das Ziel erzeicht hat.

Das Menüsystem

Wir haben nun einige Level erstellt. Diese sind aber alle noch nicht miteinander verbunden. Wir müssen nun ein Menüsystem mit Dialogen bauen, um den Spieler im Spiel zu führen. Das beinhaltet einen Start-Dialog, einen GameOver Dialog und einen Dialog zum nächsten Level. Wir halten uns bei den Dialogen in unserem Spiel nun ebenfalls an das Minimalprinzip und statten diese nur mit Text aus.

Eine kleine Menüführung

Sounds

Unser Spiel ist nun schonmal spielbar. Was jetzt noch fehlt sind Soundeffekte und Musik. Im Internet gibt es eine Menge freier Sounds. Hier muss man vor der Verwendung aber immer die Lizenzen überprüfen. Möchte man mit seinem Spiel Geld verdienen (dazu gehört auch die Anzeige von Werbung), dann ist es vielleicht besser sich Sounds zu kaufen. Eine gute Quelle hierfür ist z.B. Pond5.

Damit wären wir nun auch schon am Ende unseres heutigen Artikels. Wir haben einige Level erstellt und auch ein Menüsystem gebaut. Nächste Woche wenden wir uns dem Thema Betatests zu und kümmern uns um die Veröffentlichung auf Google Play.