TowerDefenseHeader

#4 Tower Defense: Türme und Feinderkennung

So einfach mach ich das dem Robin nicht. Ich habe mich ran gesetzt und einwenig gebastelt.#4_Turret Wie der Robin habe ich vor einiger Zeit mit Blender rum experimentiert und Sachen modelliert, das ist nur alles so verdammt lange her. Ich hab also keinen Plan mehr wie ich was gescheites in Blender zustande bekomme. Und da ich ehrlich gesagt gerade nicht die Geduld habe mich mit Tutorials in Blender einzuarbeiten, habe ich mich einfach mit dem zufrieden gegeben was ich habe, Unity und seine geometrischen Objekte. Also haben wir hier einen Würfel, und einen Würfel, und außerdem noch…einen Würfel.#4_Turret_2 Ja ich weis alles etwas eckig. Aber das ist ganz gut so, mein Konzept sollte in die Richtung gehen. Und siehe da, nach langem hin und her und der hundertsten Benutzung von Strg+Z bin ich fertig. Das ist der erste Entwurfen meines ersten Turms.

Soweit so gut. Nun machen wir uns dran und stellen mal einen dieser Türme auf. Aber nun steht der nur dämlich in der Gegend rum, der soll ja schließlich auch was tun. Also machen wir uns an die Feinderkennung, lassen wir unseren Turm “sehen” und seine Feinde verfolgen.

Dafür holen wir uns in einem Array alle unsere Feinde und gleichen die Entfernung ab, denn unser Turm soll natürlich nur auf Feinde reagieren die auch in seiner Reichweite sind. Nachdem wir dies also getan haben wissen wir wen wir angreifen könnten. Jetzt muss der Turm ihn noch verfolgen. Hier gehen wir hin und sagen das der Turm eine Rotation durchführen soll und das immer zum Feind ausgerichtet.

Und so sieht das Ganze dann aus!

TowerDefenseHeader

#3 Tower Defense: Incomming!

Oh, oh, oh…Robin zieht an, und zieht vorbei. Jetzt heißt es ran halten!

Also gut, wie der Titel schon sagt sind Feinde auf dem Weg. Ich weis das ist nichts Neues. Aber die Art und Weise ist eine Neue.

#3_UpdateIch hoffe man erkennt es, wir haben hier einen, zwei und drei Gegner. Sie kommen in Wellen von insgesamt 10 Sekunden Abstand. Dies kann nach belieben verändert werden. Und so auch der Schwierigkeitsgrad des Spiels mit der Zeit.

Außerdem haben wir noch ein paar Elemente eingebaut, zum Beispiel in der linken oberen Ecke seht ihr den Counter der euch  sagt wie viel Zeit ihr noch bis zur nächsten Welle habt. Am unteren Bildrand haben wir außerdem schon mal den Bereich für das Baumenü definiert.

Nichts von alledem ist ist Fix, aber es sind Ideen die ich schon mal einbauen wollte damit ich sie nicht vergesse.

Als nächstes kommen die Türme, dann kann ich hoffentlich in den nächsten Tagen wieder mit Robin gleich ziehen. Ich bin gespannt!

Tower Defense Challenge Update

#R2 Tower Defense: Blender Setup / Workflow

Vor etlichen Jahren – mittlerweile sogar schon Jahrzehnten – habe ich etwas in 3DS Max modelliert. Zwischenzeitlich hatte ich mir Blender angesehen aber aufgrund der Komplexität schnell wieder das Interesse verloren. Für kleinere 3D Modelle habe ich den Subdivision Modeler Wings3D genutzt – auch ein kostenloses Tool, die Oberfläche ist simpel und man findet sich ziemlich schnell zurecht. Allerdings konnte ich die Texturen nie so richtig platzieren, Stichwort: UV Maps.

Also habe ich in den sauren Apfel gebissen und mich letztes Wochenende – und das davor auch – mit Blender beschäftigt. Nach einige YouTube-Tutorials ging es dann einigermaßen von der Hand. Es ist eben noch kein Meister vom Himmel gefallen. Du musst Zeit und Mühe investieren um etwas zu lernen.

YouTube ist neben Google die zweitgrößte Suchmaschine der Welt

Blender SetupLinks habe ich die Plattform auf der der Tower steht und die Tower jeweils als separate Objekte.

Oben rechts könnt ihr die UV-Map und die Textur sehen. Ziel ist es, für das gesamte Spiel nur eine Textur von 256 x 256 Pixel zu nutzen – zumindest was die 3D Modelle anbelangt. Die einzelnen Faces können dann ähnlich wie Pixel-Art mit entsprechenden Farben belegt werden. Das erzeugt einen netten Low-Poly-Look. Mein erster Ansatz bestand darin, die Tower als High-Poly Objekte zu modellieren um daraus eine Normal-Map zu erzeugen sowie eine Ambient-Occlusion-Map und diese dann auf die Low-Poly Modelle zu legen. Der Aufwand dafür ist allerdings relativ hoch, daher habe ich mich für diese Tower Defense Challenge für den coolen Low-Poly Look entschieden.

Tower Defense Challenge Update

#R1 Tower Defense: Das Grundgerüst

Stephan (XeNonski) hat vor ein paar Tagen unsere kleine Tower Defense Challenge “ausgerufen”. Das kann ich natürlich nicht auf mir sitzen lassen und untätig bleiben. Der Ruf nach Rum und Ehre – oder war es Ruhm? – muss Folge geleistet werden. Nach dem Update von A Tiny Painter habe ich jetzt ein paar freie Ressourcen für unsere kleine Challenge.

Zur Zeit überlege ich mir noch das Setting von dem Spiel, allerdings ohne große Erfolge. Falls ihr ein paar tolle Ideen habt, immer her damit an @BigRob154 oder an @EmberoGames. Das hindert mich aber nicht daran die Entwicklung zu starten. Schließlich ist jeder gezielte Fortschritt auch ein messbarer Fortschritt. Kleine Erfolge motivieren ungemein, deswegen die Ziele in viele kleine Schritte unterteilen.

Da ich schon einige Jahre als Software-Entwickler auf der Kappe habe wurde der Data-Driven-Approach gewählt. Klingt hochgestochen ist aber ganz einfach. Man baut seine Szenen / Level nicht mühselig im Code sondern lagert alle konfigurierbaren Daten aus. Das Programm liest die Daten einfach ein und baut daraus den Level. Abstrahiert man diesen Schritt noch etwas weiter, kann man sogar ganze Level oder Kampagnen in externe Daten auslagern – das ist natürlich mein Ziel.

Der Vorteil dieser Methode besteht in drei wesentlichen Dingen:

  1. Vereinfachung des Codes / bessere Wartbarkeit
  2. Keine Neukompilierung für Änderungen / einfacheres Testen
  3. Eigene Level / Mods (Yay)

Durch die Auslagerung des eigentlichen Inhalts und deren Konfiguration spart man enorm viel Code. Von der Architektur-Seite her, kann man sich auf die wesentlichen Aufgaben des Programms konzentrieren – Steuern, Laden, Darstellen.

Ausserdem lässt sich durch diese Struktur neuer Inhalt einbauen ohne das man das eigentliche Programm anfassen muss. Die Vorteile liegen auf der Hand.

Für die Meta-Informationen wie zum Beispiel Wegpunkte, Hintergrundmusik usw. verwende ich eine JSON-Datei:

{
    "waypoints":[ {"x":4,"y":8} ],
    "waves":[
        { 
            "enemies":[
                {"name": "Cube1"},
                {"name": "Cube1"},
                {"name": "Cube2"},
                {"name": "Cube1"}
            ] 
        }
    ]
}

Der Level-Aufbau / das Layout wird über eine PNG-Datei gesteuert. Jeder Pixel im Bild steht für eine Gitter-Position im Spiel. Ein Bild von 9×9 Pixeln bildet ein Spielfeld mit einem Gitter von 9×9 Feldern (Bild stark vergrößert):
Level Grid

Die Farben stehen für bestimmte Objekte. “Weiß” steht hier für ein Weg-Element, “Grün” für Plattformen auf denen Türme aufgestellt werden können, “Gelb” ist der Spawn-Bereich der Gegner und “Rot” ist das Herzstück, das die Gegner nicht erreichen dürfen.

Zum Schluß noch ein Bild wie das ganze zur Zeit in Unity3D aussieht.

Data Driven Tower Defense Approach

Wenn ihr Fragen oder Anregungen habt schreibt mich einfach auf Twitter oder Facebook an.