Kategorie: Spielvorstellung

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.

Final Ball World Spielvorstellung – ein neuer Versuch

Final Ball World Spielvorstellung – ein neuer Versuch

Final Ball World

Final Ball World im Apple Appstore
Final Ball World im Google Playstore

Auf ein neues

Da mein erster Versuch ein Appstore reifes Spiel zu erstellen gescheitert war, plante ich nun ein wesentlich einfacheres Spiel. Inspirieren ließ ich mich von Mercury, ein Spiel aus meiner frühen Jugendzeit. Es geht darum Quecksilber durch das Kippen eines Spielbrettes möglichst ohne Verlust zu einem bestimmten Ziel zu bringen. Die Idee mit dem Kippen des Spielbrettes fand ich ziemlich innovativ und wollte genau das auch umsetzen. Bei mir sollte es jedoch kein Quecksilber sein, sondern eine Kugel die man zu einem bestimmten Ziel transportieren muss. Auf dem Weg dorthin muss man kleine Rätsel lösen und sein Geschick unter Beweis stellen.

Enviroment / Umgebung

Erstmal stöberte ich im Asset Store und sucht nach passenden Assets für das Spiel. Schnell stand für mich fest, das es ein Spiel im All werden sollte. Im All kann es eigentlich jede Art von Außergewöhnlichkeit geben, ohne das jemanden etwas daran stört (Beamen, Zeitreisen, seltsam aussehende Objekte ;)).

Los gehts!

Ich suchte mir also ein paar Materialien zusammen und fing an das grundlegende Spielprinzip auf die Beine zu stellen – aus das Kippen des Brettes. Dies erwies sich am Anfang als garnicht so einfach, denn bei jeder Rotation des Brettes flog der Ball einfach durch das Brett hindurch. Hier musste ich ein bisschen tricksen und die Position des Balles bei jeder Rotation des Brettes ein wenig nach oben verschieben. Nach einigem herum probieren klappte es dann aber! Grob gesagt war es das auch erstmal mit dem grundlegendem Spielprinzip. Ein Brett das sich bewegen kann und ein Ball der darauf herum rollt.

Level design / Kreativ sein!

Jetzt mussten natürlich jede Menge Level und Elemente her. Da war Kreativität angesagt. Ein paar Elemente stelle ich hier kurz vor.

Der Teleporter

Ein Teleporter durfte natürlich nicht fehlen. Man rollt auf die eine Seite der Platform und kommt auf der anderen Seite wieder heraus.

4 Teleporters
Lets beam you away!

Speed Up

Es sollte ja auch ein bisschen „Action“ mit ins Spiel kommen, genau dafür sind die Beschleuniger da. Berührt man dieses Element wird man im Pfeilrichtung beschleunigt.

Beschleuniger
Beschleuniger

Farbwechsler

Auch die Farbe des Balles sollte man ändern können. Die Runde Platte ist zum Einfärben des Balles gedacht. Berührt man Sie, wird der Ball in diesem Beispiel rot. Das Tor dahinter kann dementsprechend nur passiert werden, wenn der Ball eine rote Färbung angenommen hat.

Farbe wechsele dich!
Farbe wechsele dich!

Soweit so gut! Im zweiten Teil dieses Eintrages werde ich ein paar Levels vorstellen und ein bisschen auf die Herausforderungen bei der mobilen Entwicklung eingehen!

Unity Hero Spielvorstellung – Wie geht es weiter?

Unity Hero Spielvorstellung – Wie geht es weiter?

Unity Hero

Artwork 1
Artwork 1

Na, kennt ihr schon den ersten Teil von der Projektvorstellung? Ansonsten einfach hier klicken: Unity Hero Teil 1

Magische Fähigkeiten und Zaubertränke

Dem Spiel fehlte es irgendwie noch an Pep. Ich entschied mich schließlich dazu verschiedene magische Fähigkeiten einzubauen. Ein Energieball sollte den Monstern einen besonders hohen Schaden zufügen. Eine weitere Idee war eine Art schwarzes Loch, das alle Monster anzieht, so das man selbst nicht angegriffen wird. Ein weiterer Klassiker ist die Selbstheilung. Die Fähigkeiten setzte ich grafisch mit verschiedenen Partikelsystemen um. Der Energieball wird zum Beispiel direkt beim Spieler erzeugt und wandert dann in eine Richtung weiter, bis er auf Monster trifft oder nach einer gewissen Zeit erlischt (Ähnliches Konzept wie bei den Pistolenschüssen). Auch dazu brauchte ich natürlich einen Skript der beschreibt welche Fähigkeiten es gibt, wie diese sich verhalten und welche konkrete Fähigkeit der Held gerade hat. Eine Fähigkeit sollte man im Laufe des Spieles in Form eines Items einsammeln können. Auch plante ich, in einem Itemshop die Fähigkeiten durch eine In Game Währung (Münzen) verbessern zu können. Natürlich sollten auch Zaubertränke nicht fehlen. Um eine Fähigkeit zu benutzen braucht man Mana und ein gewisses Maß an Lebensenergie braucht der Spieler natürlich auch. Um diese Werte zu erhöhen gibt es einen blauen und eine roten Zaubertrank.

Fähigkeitsitems und roter Zaubertrank im Hintergrund
Fähigkeitsitems und roter Zaubertrank im Hintergrund
Energieball in Action
Energieball in Action

Münzen / Diamanten

Eine weitere Idee war das integrieren von Münzen und Diamanten als Spielwährung für den Itemshop. Münzen als auch Diamanten bekommt man, wenn man Monster töten und es werden zufällig welche gespawnt wenn man einen neuen Dungeon betritt. Diamanten sollte es deutlich seltener geben als Diamanten und diese sollte einen höheren Wert haben als die Münzen. Hier könnte man zum Beispiel im Verlauf der weiteren Entwicklung über In-App-Käufe von Diamanten nachdenken.

User Interface

Die Gestaltung eines passenden User Interfaces bereitete mir sowohl Freude als auch Kopfschmerzen. Da mir die meisten kostenlosen User-Interfaces im Asset-Store von Unity nicht gefielen und die Auswahl dort relativ bescheiden ist, entschied ich mich für ein kostenloses aus dem Netz. Fantasy UI Elements
Im Spiel schaut das ganze dann so aus:

Unity Hero mit UI
Unity Hero mit UI
1. Entwurf Item Shop
1. Entwurf Item Shop

Viele weitere unfertige Features

Der Spielentwurf hatte zu diesem Zeitpunkt schon ein relativ großes Maß an Komplexität für mich als Anfänger angenommen. Ich war total begeistert von den Fortschritten der Entwicklung und wollte immer mehr Features einbauen, die aber meist nie richtig fertig wurden. Den Itemshop habe ich angefangen zu designen, es gab aber noch keine Funktionalität. Die Fähigkeiten waren implementiert, aber es gab noch keine Verbesserungsmöglichkeiten. Ich hatte angefangen ein Levelsystem einzubauen, es gab aber noch keine Belohnungen / Vorteile für ein bestimmtes erreichtes Level. Es gab Monster, aber die Vielfalt fehlte. Auch war das Spawn-Konzept nicht ausreichend durchdacht und das Spiel wurde schnell zu schwer (immer mehr Monster).

Abbruch des Projektes

Die vielen unfertigen und halb funktionierenden Features trugen dazu bei, das ich immer weniger Lust auf das Projekt bekam. Es war kein wirkliches Ende in Sicht, da meiner Meinung nach noch enorm viel fehlte. Ich verlor aber nach einiger Zeit auch den Überblick über das, was ich noch implementieren wollte.
Alles in allem kann ich sagen, das ich sehr unstrukturiert an dieses Projekt herangegangen bin und viel zu schnell ein viel zu aufwendiges Spiel bauen wollte. Für mich war das auf jeden Fall eine wichtige Erfahrung, zu sehen das das alles so nicht funktioniert.
Ich entschied mich vorerst das Projekt beiseite zu legen und mich einem weniger aufwendigem Spiel zu widmen.

Goodbye Unity Hero – but perhaps I’ll see you again? 🙂

Unity Hero Spielvorstellung – Mein erstes Projekt mit Unity3D

Unity Hero Spielvorstellung – Mein erstes Projekt mit Unity3D

Unity Hero – mein erstes Projekt in Unity

Spielvorschau

 

Der Anfang

Nach ein paar Tutorials und der halbherzigen Lektüre eines Buches aus der Uni-Bibliothek wollte ich direkt mit einem eigenen Projekt in Unity loslegen.
Meine erste Projektidee entstand mehr oder weniger während ich im integrierten Asset Store interessante Elemente für ein zukünftiges Spiel suchte.
Viele Objekte die mich an eine Art Dungeon Spiel erinnerten, erweckten meine Aufmerksamkeit. Also entschloss ich mich etwas in der Richtung zu machen. Ein großer Dungeon, ein einsamer Held und verdammt viele Monster – so ungefähr war der grobe Plan für das Ganze.
Ich ging relativ unbefangen an das Vorhaben heran und legte gleich los (eventuell ein Fehler).

Die Spielfigur

Ich schnappte mir einen Helden aus dem Asset Store, schrieb ein Script um ihm das laufen beizubringen, fügte eine Waffe und eine Schussfunktion hinzu. Alles sag zwar noch nicht perfekt aus, aber ich hatte eine kleine Figur die durch meine Welt laufen und schießen konnte.

Der Held im Spiel
Der Held in Unity Hero – Ein Holzfäller mit Pistole

Monster

Wo ein Held ist müssen natürlich auch Monster sein! Deshalb machte ich mich als nächstes an das erstellen von Gegnern. In Unity gibt es die NavAgent Komponente mit der man 3D-Modelle einfach dazu bringen kann, immer dem Spieler zu folgen. Ist der Spieler in einer bestimmten Reichweite, so kann das Monster ihm Schaden zufügen. Schießt man und trifft ein Monster, so muss das natürlich verletzt werden. Dieses Verhalten setzte ich in einem weiteren Script um.

Ein Monster allein ist natürlich nicht sonderlich interessant, deshalb musste eine Art Spawn-Algorithmus her. Das Spiel sollte in Runden verlaufen, d.h. also in Runde 1 werden 10 Monster gespawnt, in Runde 2 15 usw.. Diese Funktionalität musste in einem weiteren Script untergebracht werden.
Monster Unity Hero

Leveldesign

Nun begann ich mit meinem Lieblingsteil der Entwicklung – dem Level design. Ich hatte ja schon im Vorfeld einige Elemente aus dem AssetStore heruntergeladen und würfelte diese nun irgendwie zu verschiedenen Dungeon-Räumen zusammen. Das ganze ist immer ein bisschen wie Minecraft – man hat verschiedene Bauteile zur Verfügung und baut, was einem in den Sinn kommt. 😀 Hier ein paar Screenshots aus dem Projekt.
Unity Hero Leveldesign

Unity Hero Leveldesign

Unity Hero Leveldesign

Unity Hero Leveldesign
Das Ganze fand ich schon echt stark – was wohl großteils an den ganzen tollen, kostenlosen Assets lag. 😀

Was jetzt an Schwierigkeiten auf mich zukam und warum ich das Projekt letzten Endes nicht fertiggestellt habe, erfahrt ihr im nächsten Artikel. Der ist sogar schon erschienen und hier zu finden: Unity Hero Teil 2

TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste