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.

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.

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.


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.

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

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.

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:


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.

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

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

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.

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.

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.