Speed Up 3D Spielvorstellung – Ein Endless Runner

Speed Up 3D Spielvorstellung – Ein Endless Runner

Speed Up 3D – Endlos Runner im Weltall

Speed Up 3D im AppStore

Die Idee / Inspirationen

Inspiriert wurde ich maßgeblich durch die beiden iOS Spiele Boost 2 und Smash Hit.
In Boost 2 hat man die Aufgabe durch einen endlosen Tunnel zu fliegen und dabei Hindernissen auszuweichen. In Smash Hit fliegt man ebenfalls durch einen endlos langen Gang und kann mit Bällen alle entgegenkommenden Hindernisse aus dem Weg räumen, ihnen jedoch nicht ausweichen.
Meine Idee war es beides zu vereinen und einen Endlosrunner zu entwerfen in dem man sowohl Hindernissen ausweichen muss, als auch durch Bälle verschiedene interaktive Elemente aktivieren muss.

Für mich war von vornherein klar die grafischen Elemente (Texturen, 3D-Models) auf ein Minimum zu beschränken, da das Spiel ein schlichtes und modernes Design haben sollte. Weiterhin sollte auf mobilen Geräten laufen und je weniger aufwendige Texturen und darzustellende Polygone, desto besser natürlich die Performance.

Plattformen – das Grundgerüst

Das Spiel sollte aus mehreren kleinen Plattformen zusammengesetzt werden, die alle zufällig aneinandergereiht wurden. Der Spieler fährt dann auf diesen Plattformen entlang. Ich wollte die Steuerung bewusst „einfach“ gestalten, da man sich neben dem navigieren des Spielers auch auf das Werfen von Bällen konzentrieren muss.
Deshalb fügte ich zwei Trigger an den Seiten jeder Plattform hinzu. Diese prüfen Kollisionen mit dem Player und blockieren ggf. die Steuerung in die jeweilige Richtung, damit der Spieler nicht seitlich von der Plattform fallen kann. Ein Trigger am Ende jeder Plattform prüft ob der Spieler die Plattform passiert hat und spawnt in dem Fall eine weitere Platform.

Platform
Eine einfache Platform mit Triggern

Ein Spieler muss her

Als aller erstes musste natürlich ein „Spieler“ her, aus dessen Sicht man das Spiel verfolgen kann. Ich entschied mich hier aus designtechnischen Gründen für die 3rd Person Perspektive.
Um die Kollidierung mit möglichen Hindernissen und dem linken / rechten Rand der Plattformen zu ermitteln erstellte ich einen Trigger, der direkt hinter das Sichtfeld des Kameraobjektes gelegt wurde. Weiterhin erstellte ich einen Trigger der den Kontakt mit dem Boden überprüft. Im Fall das man durch eine Lücke / Loch im Boden fährt, sollte man natürlich runterfallen. Ein zusätzlicher Trigger prüft, ob man das Ende der Platform erreicht hat. Ein weiterer großer Trigger, der sich über das ganze Spielfeld erstreckt, erfasst dann das Werfen von Bällen (Touchen auf den Bildschirm).

Der Aufbau des Spielers
Der Aufbau des Spielers

Bewegung kommt ins Spiel

Der Spieler soll sich natürlich auch bewegen. Seitlich sollte dies durch Kippen des Handys möglich sein. Unity bietet hierfür eine tolle und einfache Schnittstelle. In der Gyroklasse finden sich verschiedene Variablen die durch den Bewegungssensor bereitgestellt werden. Input.gyro.gravity.x liefer einen Wert der 0 ist wenn man das Handy im Landscape-Modus gerade vor sich hält. Kippt man das Gerät seitlich, verändert sich genau dieser Wert. In der Update-Funktion meines Player-Skriptes frage ich also diesen Wert ab und reagiere entsprechend mit einem Funktionsaufruf darauf.

<!--?xml version="1.0" encoding="utf-8"?-->
if (Input.gyro.gravity.x != 0) {
            moveSideward (Input.gyro.gravity.x*2F); 
        } 
}
 
Die Funktion moveSideward sieht wie folt aus: 
//Function to handle move sidewards 
    public void moveSideward(float movement){
        if (movement > 0 && canMoveRight) {
            player.transform.position += Vector3.right * movement * Time.deltaTime; 
        } else if (movement < 0 && canMoveLeft) {
            player.transform.position += Vector3.right * movement * Time.deltaTime;
        }
    }

canMoveRight und canMoveLeft sind zwei boolsche Variablen die jeweils dann false sind, wenn sich der Spieler zu nah an einer Seite der Plattform befindet und fast herunterfällt. Ist die übergebene Zahl movement > 0 dann wird der Spieler nach rechts bewegt. Ansonsten wird er nach links bewegt. Wichtig hierbei ist die Variable Time.deltaTime. Diese gibt an wie lange es gedauert hat den letzten Frame zu laden. Die Variable eignet sich super um die variable Framrate zu kompensieren, denn multipliziert man die eigentliche Bewegungslänge mit dieser Variablen, so steht sie im Verhältnis zur Framerate und das erzeugt den Eindruck einer flüssigen Bewegung.

Schießen will gelernt sein – Bälle werfen in Unity

Wie oben erwähnt soll der Spieler auch Bälle schießen können. Dazu erstellte ich ein weiteres Skript. In diesem wird abgefragt ob der Spieler den Bildschirm berührt hat. Dies geschieht über Input.GetMouseButtonDown(0). Der zurückgegebene Wahrheitswert gibt sowohl bei einem Mausklick als auch bei einem Touch auf dem Bildschirm true zurück.  Ist dies der Fall so wird ein Raycast an der Stelle durchgeführt, an der der User den Bildschirm berührt hat. Bei einer Kollision mit der zuvor erwähnten Trigger-Wand wird ein neues Ball-Objekt mit Rigidbody erzeugt und diesem wird eine Kraft in Richtung des Raycasts hinzugefügt.

In fertigen Spiel schaut das Bälle werfen dann so aus:

Ball werfen in Speed Up 3D
Ball werfen in Speed Up 3D

Im nächsten Beitrag zu dieser Reihe gehts dann weiter mit dem Leveldesign, in game Währung und anderem.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste