Tagebuch: Tower Defense

nee - wenn man dahinter gestiegen ist, ist es eigentlich ganz simpel. Ich habe mich damit jetzt bei BlackPlanet auch nochmal damit auseinander gesetzt. Ist echt einfach. Unity nimmt einem viel Programmieren ab. Man braucht das nur noch zusammen bauen und ein bischen Code. Schon gehts los…

Ja, dass überrascht mich aber doch als immer mal wieder, wie viel einem abgenommen wird. Wenn man es vorher noch nie gebraucht hat, dann rechnet man halt einfach erstmal mit dem schlimmsten.

Und gerade beim Abendessen hab ich mir noch überlegt was es wohl bedeutet hätte, das selber zu implementieren.

Was mich auch nach wie vor öfters mal positiv überrascht. Aber mit einer gescheiten Architektur bekommt man die Sachen echt verdammt schnell hin. Ich profitiere extrem davon, dass die Events über ScriptableObjects gesendet werden. Somit klatsch ich einfach eine Listener-Komponente an ein GameObject und kann wunderbar drauf reagieren. Und die anderen Komponenten brauchen absolut nichts voneinander zu wissen. Das ist sooooo wunderbar :slight_smile:.

Hab jetzt mal mit Shader-Animationen rumgespielt und einen kleinen Prototyp geschrieben. Ich hab einen Windows-Build rausgelassen und Ihr könnt den hier sehen:

https://1drv.ms/u/s!Av4-trM0Vnk9wnZToala7xdYNA5Y

Und genau solche Shader waren der Grund warum ich damals auf die andere Render-Pipeline umstellen wollte :slight_smile:

Oha, das sieht spitze aus.

1 Like

Danke ^^. War auch tatsächlich nicht viel Aufwand dazu zu kommen (was mich überrascht hat, denn ich hatte das schonmal versucht - aber viel mehr eigenen Code benötigt).

Das ist echt klasse - dank LW-RP kann ich mir den Shader einfach in einem Node-Editor zusammenklicken, so wie ich den brauche. Hatte eigentlich mal ein Shader-Tutorial auf udemy gestartet und schon einfache kleinere Shader selbst geschrieben. Aber ich bevorzuge dann doch den Node-Editor.

Wo es damals etwas blöd geworden ist - war die Animation an sich. Ich wusste nicht, wie ich die Shader-Eigenschaften animiere. Dabei kann ich einfach das Material vom zu-animierenden-GameObjekt ausklappen und die Änderung aufnehmen.

Alles andere war dann recht simpel. Eigenen Code hatte ich erst schreiben müssen, als ich die Buttons platziert habe und die Kamera um das Objekt in der Mitte rotieren lassen wollte.

Ich seh gerade, dass ich schonmal eine Shader-Animation vorbereitet hatte - aber nie eingebaut. Sie schaut aber etwas anders aus als die aus der Tech-Demo. Gefällt mir glaub aber besser, da sie mehr was von “Teleportieren” hat.

Werde es jetzt mal auf meinem Smartphone testen :slight_smile:

Ok, wird wohl ein Kompromiss aus beidem. Es wird nämlich weder der existente noch wird es exakt so wie in der Techdemo. Warum? Ganz einfach: der nutzt Emissions (Leuchteffekte) und die hab ich für die LW-RP deaktiviert und weiß auch nicht, ob ich die aktivieren werde.

Zum einen war das (afair) für manche Geräte tötlich und zum anderen kosten die Performance. Immerhin ist das eine Textur die ich weniger laden muss. Zusätzlich macht es den Shader auch einfacher.

Und so schaut es aus:

2 Likes

So. Hier mal ein paar Updates zum Spiel. Das letzte was ich euch vorgestellt hatte, waren die Animationen beim platzieren der Türme. Die selbe Animation spiele ich dann auch beim verkaufen wieder ab - nur halt rückwärts. Bietet sich an, denn ich hab nicht vor den Shader zu wechseln oder komplizierter zu machen.

Aus meinem Bekanntenkreis kam der Hinweis, dass die Kugeln kacke sind und etwas in Richtung “Laser” besser wäre. Die Idee fand ich gut und außerdem wäre ein Laser aus Sicht der Performance sicher besser - da weniger komplex. Anfangs war mir nicht klar, wie ich das mache - aber dann hab ich die Line-Render-Komponente entdeckt. Vereinfacht erklärt: damit kann ich ein Polygon zeichnen. Gefreut hab ich mich darüber, dass ich die Anzahl der Vertecies der Enden und Ecken anpassen kann. Den damit hab ich den Schuss abgerundet bekommen.

Desweiteren hab ich noch einen Bug gefixt. Die Türme haben Ihre Liste an Minions nicht richtig aktualisiert. Dadurch war an erster Stelle in Minion der nicht mehr existiert - dementsprechend hat der Turm nie wieder gefeuert. Wird mit dem kommenden Update behoben werden.

Damit hab ich auch nur noch einen offenen Punkt auf meiner Liste:

  • Türme sollen sich langsamer drehen.

Ist auch ein Feedback gewesen um das ich mich kümmern möchte. Stellenweise ist das doch sehr Ruckartig. Außerdem muss ich da auch implementieren, dass Türme erst feuern, wenn ausgerichtet. Gerade beim Laser schaut der erste Schuss sehr seltsam aus.

Ich hätte gerne ein Video angehängt - aber mein Aufnahme-Programm erkennt die Monitore nicht mehr, was das Aufzeichnen schwer macht. Aber da ich hoffentlich spätestens bis Ende der Woche eine neue Version veröffentliche, kann ich eigentlich euch auch selber die Änderungen entdecken lassen :stuck_out_tongue:.

Oh mann. Hab endlich mein OBS-Problem gelöst, dank diesem YT-Video hier:

Hatte letzten Monat mal eine Occulus Rift ausprobiert und dafür auch meine NVIDIA-Settings angepasst gehabt. Nachdem ich dort OBS explizit intern laufen lasse funktioniert alles wieder wie gewohnt (yay … hip hip).


Abgesehen davon bereite ich gerade das nächste Release vor :slight_smile::

  • Fix: Turm schießt erst nach Anvisierung
  • Bugfix: Türme hatten Gegner nicht mehr anvisiert
  • Bugfix: Lebenspunkte von Minions werden nun korrekt mit jedem Level erhöht
  • Radius von Türmen ist besser zu erkennen
  • Lebensbalken für Minions
  • Turm schießt nun laser anstatt Kugeln
  • Animation: Nach töten von Minions
  • Animation: Bei Platzierung von Türmen
  • Animation: Nach Verkauf von Türmen

Und laut Play-Store Benachrichtigung ist das Update nun online :slight_smile:

Ich kann ja mal einen Ausblick auf v0.5 geben. Geplant ist ein Hauptmenü einzuführen mit erstmal den folgenden Funktionen:

  • Spiel starten
  • Laufendes Spiel beenden
  • Changelog einsehen

Daneben hab ich noch einen weiteren wichtigen Punkt:

  • 64bit support
  • AppBundle-Builds für kleinere apk-größe (solls zuminest mal bewirken [glaub ich])

Denn momentan ist die App nur 32bit fähig und der Play-Store wird das auch nicht mehr all zu lange mitmachen.

So. Schon eine ganze Zeit her, dass ich hier was geschrieben hab. Hatte mitunter zwei Gründe:

  1. Ich hatte am WE nicht viel Zeit
  2. Ich hatte mal wieder meinen 3D-Kurs weiter gemacht und wollte erstmal die Lektion abschließen.

Allerdings kommt Punkt 2 meinem Spiel zu gute. Also hab ich im Prinzip meine Zeit einfach mit lernen verbracht.

Heute hat es mich aber mal wieder gereizt etwas umzusetzen und hab mehr erreicht als gedacht. Eigentlich war mein Tagesziel das Hauptmenü soweit im groben fertig zu bekommen. Das hab ich auch, inkl. tests. Den Spiel-Starten-Button hatte ich ja, nur war der bisher ohne test. Das hab ich geändert.

Außerdem hab ich jetzt ein nettes Navigationssystem drin. Das managt im wesentlichen welches Panel wann angezeigt wird. Im wesentlichen funktioniert es recht einfach. Es gibt ein NavigationsEvent. Das nimmt entgegen, welches Panel ich anzeigen möchte und eine Router-Componente schaltet dann das entsprechende Panel aktiv und alle anderen als inaktiv (ist auch getestet). Schaut dann so aus:

image

Das ganze lässt sich sehr einfach erweitern und dürfte flexibel genug sein um alle meine Use-cases abzudecken. Das Target ist btw ein enum - wo ich direkt an den Thread denken musste:

Aber da ich hier eine endliche Anzahl erwarte und der Inspector mir eine schöne Dropdown-Ansicht ermöglicht, hielt ich es für eine gute Idee:

namespace Game.Ui {
    
    [Serializable]
    public enum NavItem {
        MainMenu = 0,
        ChangelogPanel = 1
    }
}

Allerdings mit festen Konstanten. Ich weiß nicht mehr genau welche Probleme ich damals mit Feature Runner hatte, aber ich meine das es sinnvoll war dem enum Werte zuzuweisen. Ich glaube es war wegen dem löschen. Angenommen ich lösche “MainMenu”, dann würde “ChangelogPanel” den Wert 0 bekommen, was ja nicht mehr stimmt.

Zu guter letzt hab ich jetzt noch die Changelogs im Spiel als Scriptable-objects hinterlegt:

image

Zum Glück hab ich ja alles in Hack’n’plan hinterlegt, sodass es relativ einfach war an die Infos zu den Änderungen zu kommen. Und pflegen kann ich das dann im Unity-Inspector:

image

Das wars für heute. Es geht dann damit weiter, dass ich eine Ansicht für das Changelog baue :slight_smile:

Hab die letzten Tage immer mal wieder was machen können und heute sogar recht viel. Die Ansicht für das Changelog ist nun komplett fertig und geht (hoffentlich) das letzte mal in die Testphase.

Schön war vor allem der Moment, als ich Komponenten wiederverwenden konnte. Somit konnte ich den Zurück-Button komplett ohne eine Zeile Code einbauen und auch direkt als Prefab ablegen. Denn für andere Panels kann ich den noch super gebrauchen.

Viel werde ich heute dann auch nicht mehr machen (vermutlich nur das mergen der Sachen von Feature-Branch -> 0.5-Branch).

Morgen werde ich vermutlich gar nix machen können, weil da sind wir auf der ComiCon. Aber am Sonntag komm ich vllt dann noch zu was :slight_smile:.

Die ist ja in Stuttgart :fearful: Alle bekannten Messen sind doch immer irgendwo in Norddeutschland. Wahnsinn. Wollte immer auf die CeBit, aber Hannover war mir dann doch zu krass, und jetzt gibt es die nicht mehr. Dann halt auf die ComiCon :sweat_smile:

Warum schockiert? Ich nehme an, weil du dein Glück kaum fassen kannst, da hinzu kommen, weil du in der nähe wohnst? Also ich finds gut, dass die hier ist. Karlsruhe wäre mir zwar lieber (A8 ist kacke) - aber immerhin sinds nur 45-60min fahrt von uns aus.

War auf jeden Fall mal wieder echt cool gewesen. Zwar viele Menschen, aber das ist wohl unausweichlich ^^.

Ich finde zwar gerade etwas wenig Zeit für das Projekt - aber tot ist es definitiv nicht. In der letzten Woche hab ich die Darstellung des Changelogs fertig gestellt und bin mittlerweile am Settings-Panel.

Auch dort war ich doch schon relativ fleißig. Ich hab die Persistierung der Einstellung schon drin und ein EditorWindow für Unity geschrieben (damit ich auch von dort die Einstellung manipulieren kann).

Was jetzt noch fehlt ist halt das UI und auch, dass die Einstellungen angewandt werden. Hier hab ich aber noch ein bisschen Schiss vor crashes. Deswegen überlege ich, ob ich die Einstellungen erst bei Spielstart anwende. So hätte der Spieler bei einem Crash die Chance Einstellungen bei einem Neustart zu ändern.
Ich hatte diesbezüglich auch etwas gegoogelt ob ich mitbekommen kann, ob meine App gecrasht ist oder nicht. Leider hab ich dazu nicht wirklich was gefunden. Weil eigentlich wollte ich in dem Fall die Einstellungen beim nächsten Start zur Sicherheit resetten.

Also Ihr seht: auch wenn die Geschwindigkeit momentan etwas gedrosselt ist - die Entwicklung geht trotzdem weiter voran. Und vielleicht kann ich bis Ende der Woche ein neues Release raushauen :slight_smile:.

Ok, also ein Release wird es heute wohl doch nicht mehr geben. Ich sehe zu, dass ich das mit den Einstellungen vllt heute fertig bekomme - auch wenn ich es vermutlich nicht aktiv haben werde im Release.

Warum? Nun ja - ich kann keinen Unterschied im Spiel festmachen, wenn man zwischen low und heigh einstellungen wechselt. Von daher gesehen, wäre es lediglich ein Risiko. Dennoch will ich es fertig implementieren, denn vielleicht kann ich es ja doch irgendwann mal gebrauchen. Und da wäre es blöd, wenn ich den existierenden Code weg werfen würde.

Abgesehen davon hab ich noch einen Bug offen, der es erlaubt, dass Spieler für den selben Minion mehrfach belohnt werden. Und den möchte ich auch gern im nächsten Release mit drin haben. Wobei - vllt auch nicht - ich weiß noch nicht.

So. Den Bug konnte ich heute tatsächlich auch noch fixen (hätte ich nicht gedacht, war aber dann doch relativ einfach).

Allerdings komme ich heute abend nicht mehr zum testen. Das sollte ich aber unter der Woche bewerkstelligen können. Wenn dabei nichts größeres mehr auftaucht, dann sollte ich ohne Probleme die nächste Woche Version 0.5 releasen können :slight_smile:.

Das Release ist getestet und hatte noch ein paar Kleinigkeiten zu machen. Aber jetzt ist es durch und eingereicht :slight_smile:. Dementsprechend sollte das Update auch bald bereit stehen.

Die Release-notes:

+ New: 64bit-support
+ New: Hauptmenü 
+ New: Changelog Panel
+ Fix: Spieler bekam mehrfach die Belohnung für getötete Minions

Was vor allem wichtig für das Release war, war der 64bit support. Denn (wie glaub schon erwähnt) wird der bald vom PlayStore voraus gesetzt. Deshalb hab ich beim veröffentlichen der letzten Versionen auch immer einen Warnhinweis angezeigt bekommen. Heute hatte die PlayStore-Console aber zum Glück nichts zu meckern :slight_smile:.