Monat: Juni 2017

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.

Tetris Tutorial Teil 2 – Das Spielfeld und die Würfelgruppen

Tetris Tutorial Teil 2 – Das Spielfeld und die Würfelgruppen

Tetris  Tutorial Teil 2 – Das Spielfeld und die Würfelgruppen

Let’s go

Als Grundlage für das Spiel habe ich mir mit Blender einen Würfel im „abgeflachten“ Kanten erstellt um eines gewisses Retro-Feeling zu schaffen. Den Würfel gibt’s hier zum Download –> http://blog.mkgames.org/wp-content/uploads/2017/05/cubeblend3.blend

Nun erstellt ihr euch ein leeres Unity Projekt in 3D und öffnet eine neue Szene. Das ganze sollte so aussehen:

Unity leeres Projekt
Unity leeres Projekt

Ich habe als Hintergrund eine von diesen Skyboxes genommen: https://www.assetstore.unity3d.com/en/#!/content/60004 Einmal heruntergeladen wählt ihr einfach eine Skybox eurer Wahl und zieht diese in den Scene Tab. Ich habe die CloudyCrown_Sunset.mat gewählt. Das Licht in der Szene habe ich noch auf weiß gestellt.

Skybox und Farbwähler
Skybox und Farbwähler

 

Die Kamera-Koordinaten werden auf (6.91, 6.42, -17.77) gesetzt und die Y-Komponente der Rotation auf 5.778 um später einen guten Blick auf das komplette Spiel zu haben.

Das Feld

Als nächstes kümmern wir uns um das Feld für die Tetris Steine. Ihr erstellt unter GameObject ein neues GameObject mit dem Namen Group1. Nun zieht ihr den vorher in euer Projekt geladenen Würfel in Group1.

Jetzt werden die Würfel zu einem Feld angeordnet. Dieses muss ganz speziell Koordinaten aufweisen, damit später die Positionierung der Tetrisblöcke leichter wird. Den ersten Block stellt ihr auf die Koordinaten (0.5, 0, 1.5). Ihr dupliziert den Würfel mit einem Rechtsklick, Duplicate und setzt erhöht die Y-Koordinate um 2, also (0.5, 2, 1.5). Diesen Schritt wiederholt ihr, bis es 8 Blöche in Reihe sind.

Ein paar Würfel
Ein paar Würfel

Die Gruppe 1 dupliziert ihr wiederrum und reiht sie 5x aneinander.

Das Feld nimmt Form an
Das Feld nimmt Form an

Jetzt geht’s an die Ränder. Dazu dupliziert ihr wieder die Würfel und ordnet sie in etwa so an wie auf dem folgendem Bild. Dann erstellt ihr ein neues GameObject und zieht alle Gruppen dort rein. Anschließend erhöht ihr die y-Komponente des neuen GameObjects noch um 0.5.

Das Feld ist fertig
Das Feld ist fertig

 

 

Die Steine / Würfel

Als nächstes werden die Tetris Steine gebaut. Für jeden Stein muss ein Material mit der jeweiligen Farbe erstellt werden. Entweder ihr erstellt die Materialien selbst, oder ladet die von mir genutzten hier runter:

blog.mkgames.org/wp-content/uploads/2017/05/Materialien.zip

Jede Gruppe besitzt einen Wrapper in Form eines GameObjects der später auch die Rotation für die Gruppe regelt. In dieses leere GameObject zieht ihr nun jeweils wieder den Würfel herein und setzt den Skalierungsfaktor auf (0.5,0.5,0.5). Die Position des Würfels sollte (0,0,0) sein.

Würfelgruppen Wrapper
Würfelgruppen Wrapper

Nun dupliziert ihr den Würfel und erstellt die erste Gruppe. Jedem Würfel muss dann nochmal via Drag and Drop ein Material / eine Farbe zugewiesen werden. Seit ihr fertig mit einer Gruppe, zieht ihr diese in einen Ordner mit dem Namen Resources (dieser muss erst erstellt werden) in euren Projekt Tab. Dadurch wird ein Prefab erzeugt das später ganz einfach durch einen Aufruf im Skript in das Spiel geladen werden kann.

Diesen Schritt wiederholt ihr mit allen Gruppen und weißt jeder Gruppe ein andersfarbiges Material zu. Und Tadaaaa – schon habt ihr die Tetriswürfel erstellt.

Die fertigen Würfelgruppen
Die fertigen Würfelgruppen
Tetris Tutorial Teil 1 – Wie baue ich ein Spiel?

Tetris Tutorial Teil 1 – Wie baue ich ein Spiel?

Tetris  Tutorial Teil 1 – Einleitung

Was soll diese Beitragsreihe? / Einleitung

Hier möchte ich euch zeigen, wie ein komplettes Spiel von Grund auf entsteht. Die Assets habe ich mir zum Teil aus dem Asset Store geladen, diese dienen aber nur der Verschönerung und müssen nicht zwangsweise genutzt werden. Wichtig ist hier eher der Entstehungsprozess: angefangen von einer leeren Szene in Unity bis zu einem spielbaren Projekt. Ich habe Tetris für diese Blogreihe ausgewählt, da die grafischen Anforderungen sehr gering sind und auch das Spielprinzip verhältnismäßig schnell implementiert ist. Es gibt im Netz jedoch schon ein sehr gutes englisches Tutorial über Tetris in Unity. Deshalb will ich das alles ein bisschen aufpeppen und in 3D gestalten.

Anfangen werde ich mit den Grundlagen, danach wird’s praktisch – es geht ans Umgebungsdesign / Graphic User Interface und zum Schluss wagen wir uns an die Programmierung.

!Achtung: Es geht hier erstmal um das Erstellen eines Prototypes für den Computer. Eventuell werde ich in einer Weiterführung dieser Blogreihe die Portierung auf mobile Geräte besprechen.

So schaut das Projekt am Ende der Tutorialreihe aus:

Die Basics

Tetris kennt wahrscheinlich jeder. Trotzdem möchte ich ähnlich dem Beitrag von NoobTuts NoobTuts 2D Tetris mit ein paar kleinen Definitionen anfangen, die das Verstehen der Einträge erleichtern und Unklarheiten aus dem Weg schaffen sollen.

Würfel: In Tetris wird in Würfeln gedacht. Eigentlich besteht das ganze Spiel nur aus kleinen, gleichgroßen Würfeln. Jeder Spielstein ist ein Würfel.

Gruppen: Die Würfel sind in Gruppen miteinander verbunden. Jede Gruppe hat seine eigene Farbe und Form und besteht aus 4 Würfeln. Hier alle in Tetris vorkommenden Gruppen findet ihr zum Beispiel hier:

Tetris Gruppen + Rotationen

Ressourcen

Hier nochmal eine Liste aller verwendeten Ressourcen zum Download. Gerne könnt ihr euch daran orientieren, aber auch andere Assets nach belieben zusammen würfeln, oder eure eigenen bauen!

  • Die Skybox im Hintergrund kommt von hier
    https://www.assetstore.unity3d.com/en/#!/content/60004
  • Für die Schrift an der linken Seite habe ich Text Mesh Pro verwendet
    https://www.assetstore.unity3d.com/en/#!/content/84126
  • Die grafische Benutzeroberfläche (GUI) kommt von hier
    https://www.assetstore.unity3d.com/en/#!/content/53679
  • Und den Würfel habe ich selbst in Blender gestaltet. Den gibt es hier:
    http://blog.mkgames.org/wp-content/uploads/2017/05/cubeblend3.blend

Im nächsten Teil der Beitragsreihe gehts dann richtig praktisch in Unity weiter!

TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste