Ein Game in 2½ Stunden

Hallo Leute,
Vor drei Tagen habe ich versucht mit Unity ein Mobile-Spiel in 2 ½ Stunden zu entwickeln. Vorher hatte ich mir schon ein simples Spielkonzept überlegt.Der Spieler sollte mit einem Joystick eine langgezogene Kugel steuern. Mit dem anderen Joystick sollte er die Kugel und damit den an ihr befestigten Gewehrlauf( nur ein Zylinder ) drehen können. Außerdem sollte der Gewehrlauf kleine Kugeln schießen, wenn man den 2. Joystick benutzt.

Zuerst schrieb ich ein simples Movement-Script für den ersten Joystick. Für die Joysticks benutzte ich Joystick-Pack aus dem Unity-Assetstore. Dann erstellte ich das das Drehen bzw. Schießen des Spielers. Das war dann schon schwieriger. Vom Joystick-Pack habe ich die Daten als Richtungsvektor und Horizontale bzw. Vertikale Achse. Ich musste erst mal ein bisschen herumsuchen wie ich einen Richtungsvektor als Rotation für ein Objekt angebe. Schließlich schaffte ich es aber mit Quaternion.LookRotation.

Dann fragte ich danach ab, ob der Vektor nicht 0 beträgt und instanziere wenn ja eine kleine Kugel (mit Rigidbody-Komponente) am Lauf der Waffe und gebe ihr einen Schub nach vorn.

Die Kraftausübung hat leider irgendwie nicht funktioniert. Deshalb fallen die Kugeln einfach auf den Boden oder prallen aufeinander und erhalten dadurch eine leichte Kraft in beliebige Richtung.

Nun brauchte ich noch eine Map. Ich modellierte sie in Blender, indem ich einen Würfel nahm, seine Faces extrudierte, LoopCuts setzte und die neu entstandenen Faces wieder extrudierte. Dadurch entstand eine Art sehr offenen Labyrinth. Dann noch eine Fläche als Boden darunter und fertig.

Ich importierte die Map in Blender und ließ ein NavMesh erstellen. Dann nahm ich mir einen Zylinder und bereitete ihn als NavMeshAgent vor. Ich schrieb ein Script, das den Gegner einfach immer dem Spieler hinterherlaufen ließ.

Nun blieben mir noch 20 Minuten, inden ich das Sterben der Gegner und des Spielers sowie das Spawnen der Gegner entwickeln musste.

Zuerst schrieb ich ein Script, dass überprüft, ob ein Gegner den Spieler berührt. Wenn das der Fall ist, wird ein GameOverScreen angezeigt, auf dem der Spieler das Spiel neustarten kann.

Dann war das Spawnerscript an der Reihe. Dieses sollte auf leeren Objekten in der Szene arbeiten und alle 15 Sekunden einen Gegner instanzieren. Dabei wird nach jedem Spawn die Zekt bis zum nächsten Spawnen um eine Sekunde verkürzt. Später hatte ich das Problem, dass der original Gegner wenn vom Spieler beseitigt wurde, nicht mehr instanziert werden konnte. Dafür hätte man sicherlich eine schöne Lösung finden können ( zBs. mit Prefabs) aber dar ich unter Zeitdruck war erstellte ich einfach einen Würfel unter der Map und Stellte das Original darauf. Nach einer Weile kam das Problem wieder, weil scheinbar ein paar Kugeln durch den Boden rutschen. Also setzte ich noch einen Würfel über das Original und das Problem war gelöst. Dar ich es in 2 ½ Stunden nicht mehr geschafft habe den Spieler anzufangen, wenn er von der Map fällt, kann man das Original unter der Map immer noch sehen, wenn man herunter fällt.

Das Sterben der Gegner war eine schwierige Angelegenheit, denn ich musste überprüfen ob irgendeine Kugel mit irgendeinem Gegner kollidiert. Dafür müsste ich eigentlich eine Liste mit allen Kugeln oder mit allen Gegnern machen. Ich stand aber unter starkem Zeitdruck. Ich 3Minuten würde ich das nie schaffen. Dann fiel mir auf, dass alle instanzierten Kugeln Bullet Clone heißen. Ich fügte dem Gegnerscript das eine Methode hinzu, die alle Kollisionen durchgeht und guckt, ob der Name des kollidierenden Objekts Bullet enthält. Wenn ja zerstört sich der Gegner selbst.

Leider funktionierte die Selbstzerstörung nicht. Unity Objekten liegt scheinbar nicht viel am Tod. Ich löste das Problem, indem ich im Bulletscript abfragte, ob ein Objekt berührt wird, das Enemy im Namen trägt und gegebenenfalls auch die Zerstörung des Gegners übernimmt.