<?xml version="1.0" encoding="utf-8"?>







<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
  <title>Vitalij Mik: godot</title>
  <subtitle>Persönliche Webseite und Blog</subtitle>
  <id>https://blackscorp.github.io/feed/by_tag/godot.xml</id>
  <link href="https://blackscorp.github.io/feed/by_tag/godot.xml" rel="self" type="application/atom+xml"/>
  <link href="https://blackscorp.github.io/blog/" rel="alternate"/>
  <updated>2026-11-08T10:21:35+00:00</updated>
  <author><name>Vitalij Mik</name></author>
  
  <entry>
    <title>Loot und Inventar in Godot: UI mit eigenen Szenen umsetzen</title>
    <id>https://blackscorp.github.io/blog/loot-und-inventar-in-godot-ui-mit-eigenen-szenen-umsetzen/</id>
    <link href="https://blackscorp.github.io/blog/loot-und-inventar-in-godot-ui-mit-eigenen-szenen-umsetzen/" rel="alternate"/>
    <published>2026-10-28T00:00:00+00:00</published>
    <updated>2026-10-28T00:00:00+00:00</updated>
    <summary>So setze ich Loot und Inventar in Godot um: eigene UI-Szenen, Tastatursteuerung und stapelbare Gegenstände im Spielprototyp.</summary>
    <content type="html" xml:base="https://blackscorp.github.io/blog/loot-und-inventar-in-godot-ui-mit-eigenen-szenen-umsetzen/">&lt;p&gt;Heute habe ich mich an Loot und Inventar gesetzt. Schon am Anfang ist mir dabei ein Fehler aufgefallen: Ich hatte die KI nicht wirklich gesteuert. Bei der Demo dachte ich, sie würde schon wissen, was sie tut, und habe ihr zu viel Kontrolle über den Code gelassen, ohne selbst genau genug hinzuschauen.&lt;/p&gt;

&lt;p&gt;Die &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;World.cs&lt;/code&gt; war inzwischen für ziemlich viel zuständig: Gegner spawnen, Animationen abspielen, den Spieler steuern und Eingaben verarbeiten. Als ich dann noch die UI für das Inventar einbauen wollte, landete auch die erst einmal in dieser großen Klasse. Nach mehreren Versuchen war das Inventar trotzdem nicht sichtbar.&lt;/p&gt;

&lt;p&gt;Im normalen Godot-Projekt würde ich dafür eine eigene 2D-Szene anlegen und ein Script schreiben, das sich nur um diese Szene kümmert. Also habe ich der KI den Hinweis gegeben, das Loot-Fenster und das Inventar als eigene Szenen aufzubauen. Das war der Wendepunkt: Die UI bekam eigene Scripts, während die &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;World.cs&lt;/code&gt; die Menüs miteinander verbindet und den Ablauf in der Spielwelt steuert. Danach ließ sich das Verhalten viel besser umsetzen.&lt;/p&gt;

&lt;p&gt;Zum Looten können Gegner eine Beutekiste fallen lassen. Wenn ich in ihrer Nähe die Leertaste drücke, öffnet sich das Loot-Fenster. Dort kann ich alles einsammeln, abbrechen oder einzelne Gegenstände auswählen. Ich kann auch zum Inventar wechseln und Gegenstände zwischen dem Loot und meinem Inventar hin- und herlegen. Gleiche Gegenstände werden dabei als ein Eintrag mit einer Anzahl angezeigt.&lt;/p&gt;

&lt;p&gt;Rückblickend war nicht unbedingt das verwendete Modell – GPT-6 Luna mit Reasoning-Level „mittel“ – der entscheidende Punkt. Viel wichtiger war, dass ich konkreter beschrieben habe, wie die UI in Godot aufgebaut werden soll. Der Hinweis auf eigene Szenen und getrennte Scripts hat geholfen, die Aufgabe in kleinere, verständlichere Teile aufzuteilen.&lt;/p&gt;

&lt;h1 id=&quot;tasten-und-layout&quot;&gt;Tasten und Layout&lt;/h1&gt;

&lt;p&gt;Bei der Umsetzung musste ich mir auch Gedanken über die Steuerung machen. Ich möchte das Spiel zunächst komplett mit der Tastatur spielen und später möglichst auch mit einem Xbox-Controller. Die aktuelle Steuerung funktioniert mit der Tastatur; den Controller habe ich bei der Tastenwahl erst einmal als Ziel im Hinterkopf behalten.&lt;/p&gt;

&lt;p&gt;Auf der Tastatur habe ich deshalb die Taste „J“ als Bestätigung ausgewählt und „K“ zum Abbrechen beziehungsweise Wegwerfen vorgesehen. Mit „W“ und „S“ bewege ich die Auswahl innerhalb des Loot-Fensters oder des Inventars nach oben und unten. Mit „A“ und „D“ wechsle ich zwischen den Bereichen.&lt;/p&gt;

&lt;p&gt;Ein typisches Grid-Layout wollte ich zunächst nicht umsetzen. Für den Anfang sollte eine einfache Liste reichen. Im Grunde dachte ich an Folgendes:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;flowchart LR
subgraph Loot
UI[&quot;`Alles einsammeln | abbrechen
Item 1 2x
Item 2 1x
Item 3 3x
`&quot;]
end
subgraph Inventar
  UI2[&quot;`Item A 1x`&quot;]
end
UI -. Tauschen .-&amp;gt; UI2
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das Verhalten war gar nicht so leicht zu erklären. Am besten hat es funktioniert, als ich den Aufbau mit zwei Spalten in Excel verglichen habe: Die erste Spalte ist in Bereiche aufgeteilt. Oben wechselt man zwischen den Loot-Aktionen, unten wählt man die Gegenstände aus. Dazu kommt die zweite Spalte für das Inventar. Mit diesem Bild konnte ich der KI besser beschreiben, wie die Auswahl zwischen den Bereichen funktionieren soll.&lt;/p&gt;

&lt;p&gt;Zum Schluss mussten die Gegenstände noch nach Namen gruppiert werden, damit gleiche Items als Stapel mit ihrer Anzahl erscheinen. Für die Aufbewahrung während des Spiels gibt es eine &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Session&lt;/code&gt;-Klasse. Das ist eine eigene Klasse im Projekt, die von Godots &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Node&lt;/code&gt; erbt. Ihr Inventar ist aktuell eine statische Liste: Es bleibt beim Wechsel zwischen Stadt und Arena erhalten, wird aber noch nicht dauerhaft auf der Festplatte gespeichert.&lt;/p&gt;

&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;/h1&gt;

&lt;p&gt;Nach den ersten Tagen merke ich schon, was passiert, wenn ich den Code aus der Hand gebe und nicht genau darauf achte, wie er aufgebaut ist. Die große &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;World.cs&lt;/code&gt; hat die Arbeit an der UI erschwert. Mit eigenen Szenen und Scripts wurde das Ergebnis übersichtlicher und das Verhalten ließ sich besser umsetzen.&lt;/p&gt;

&lt;p&gt;Immerhin kann ich jetzt zwischen Kampfszene und Stadt wechseln, Gegner besiegen und ihren Loot einsammeln. Es fehlt noch ein Ziel im Spiel: Wozu mache ich das Ganze, und was bringt mir der Loot?&lt;/p&gt;

&lt;p&gt;Das sind spätere Fragen. Im Moment denke ich darüber nach, das Projekt mit klareren Regeln und Skills sauber neu anzufangen und mich langsam mehr um die Grafik zu kümmern. Ich merke schon, dass das Aussehen eine wichtige Rolle für den Spielspaß spielt. Vielleicht gehe ich das als Nächstes an.&lt;/p&gt;
</content>
    <category term="gamedev"/><category term="godot"/><category term="rpg"/>
  </entry>
  
  <entry>
    <title>Mein erstes Spiel mit Godot: Roguelike-Idee und erster Prototyp</title>
    <id>https://blackscorp.github.io/blog/erstes-spiel-mit-godot-roguelike-prototyp/</id>
    <link href="https://blackscorp.github.io/blog/erstes-spiel-mit-godot-roguelike-prototyp/" rel="alternate"/>
    <published>2026-10-27T00:00:00+00:00</published>
    <updated>2026-10-27T00:00:00+00:00</updated>
    <summary>Ich entwickle mein erstes Spiel mit Godot: eine Roguelike-Idee mit Kampfinstanz, Gegnern und einem ersten spielbaren Prototyp.</summary>
    <content type="html" xml:base="https://blackscorp.github.io/blog/erstes-spiel-mit-godot-roguelike-prototyp/">&lt;p&gt;Mit diesem Blog habe ich mir einen lang gehegten Wunsch erfüllt. Jetzt ist der nächste dran: Ich möchte mein eigenes Spiel entwickeln.&lt;/p&gt;

&lt;h2 id=&quot;ich-möchte-mein-eigenes-spiel-entwickeln--und-so-sieht-es-momentan-aus&quot;&gt;Ich möchte mein eigenes Spiel entwickeln – und so sieht es momentan aus&lt;/h2&gt;

&lt;p&gt;Im Video ist der aktuelle Stand des Prototyps zu sehen: Ich gehe durch das Portal in die Kampfinstanz und stelle mich den Gegnern. Noch ist das Spiel ganz am Anfang, aber der erste Kampf ist bereits spielbar.&lt;/p&gt;

&lt;figure class=&quot;article-video-figure&quot;&gt;
  &lt;video class=&quot;article-video&quot; controls=&quot;&quot; playsinline=&quot;&quot; preload=&quot;metadata&quot; poster=&quot;/blog/erstes-spiel-mit-godot-roguelike-prototyp/header.webp&quot;&gt;
    &lt;source src=&quot;/blog/erstes-spiel-mit-godot-roguelike-prototyp/demo.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    Dein Browser unterstützt keine Videowiedergabe.
  &lt;/video&gt;
  &lt;figcaption&gt;Der aktuelle Stand des Prototyps.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Bei der Arbeit kenne ich den üblichen Weg: Eine Anforderung steht fest, daraus ergeben sich Akzeptanzkriterien und Aufgaben. Schritt für Schritt entsteht so ein Projekt. Bei meinem Spiel ist es anders. Es gibt noch keine fertige Anforderung und keinen genauen Plan. Da sind erst einmal nur ein paar Ideen und die Frage: Was könnte daraus werden?&lt;/p&gt;

&lt;h2 id=&quot;eine-idee-mit-vielen-durchläufen&quot;&gt;Eine Idee mit vielen Durchläufen&lt;/h2&gt;

&lt;p&gt;Ich spiele gerne Roguelikes. An diesem Genre gefällt mir, dass es kurzfristige Erfolge mit einem langfristigen Ziel verbindet. Im Kampf stelle ich mich Gegnern, sammle Loot und freue mich über jeden gewonnenen Durchlauf. Gleichzeitig arbeite ich auf etwas Größeres hin: Mit dem Ausbau der Stadt möchte ich bessere Ausrüstung bekommen und mich später stärkeren Gegnern stellen.&lt;/p&gt;

&lt;p&gt;In der Stadt beginnt der Spieler seinen Weg. Durch ein Portal gelangt er in ein Gebiet voller Gegner. Wenn er sie besiegt, soll er Beute und Ressourcen mit zurückbringen können. Damit könnte er nach und nach seine Stadt ausbauen: vielleicht mit einer Schmiede, einem Tränkeladen oder Möglichkeiten, Rohstoffe weiterzuverarbeiten.&lt;/p&gt;

&lt;p&gt;Jeder Ausflug durch das Portal wäre dabei ein eigener Run. Die Runs könnten auch bestimmen, wie lange Ausbauten dauern. Ob diese Idee am Ende wirklich Spaß macht, weiß ich noch nicht. Genau das möchte ich herausfinden, indem ich zuerst die grundlegende Spielmechanik entwickle.&lt;/p&gt;

&lt;h2 id=&quot;warum-ich-das-spiel-entwickeln-möchte&quot;&gt;Warum ich das Spiel entwickeln möchte&lt;/h2&gt;

&lt;p&gt;Natürlich gibt es schon viele Spiele. Für mich ist aber nicht nur das fertige Spiel das Ziel, sondern auch der Weg dorthin.&lt;/p&gt;

&lt;p&gt;Ich möchte mich mit C# beschäftigen. Die Sprache erinnert mich in Teilen an PHP, ist aber kompiliert – und eine solche Sprache wollte ich schon lange besser kennenlernen. Außerdem macht mir das Modellieren in Blender Spaß. Es ist für mich eine entspannende Beschäftigung nach der Arbeit und eine gute Alternative zum Doomscrolling.&lt;/p&gt;

&lt;p&gt;Auch beim Einsatz von KI möchte ich dazulernen: Wie muss ein Projekt aufgebaut sein, damit eine KI sinnvoll mitarbeiten kann? Welche Fähigkeiten und Abläufe helfen dabei? Und lässt sich ein Projekt wie dieses gut mit einem GitHub-Kanban-Board organisieren?&lt;/p&gt;

&lt;p&gt;Am Ende würde ich das Spiel gerne veröffentlichen. Als ersten Schritt kann ich mir itch.io vorstellen. Mein erstes Spiel direkt auf Steam zu veröffentlichen, wäre mir vermutlich noch zu früh.&lt;/p&gt;

&lt;p&gt;Ein weiterer Grund für das Projekt ist, dass ich langfristig eine Grafikkarte anschaffen möchte, mit der ich leistungsfähigere KI-Modelle lokal ausprobieren kann. Mich interessiert, wie weit ich bei der Spieleentwicklung mit einem Modell aus der Qwen-Familie komme und wo seine Grenzen liegen. Für welche Aufgaben reicht die lokale KI aus? Wann ist ChatGPT oder ein anderes Frontier-Modell die bessere Wahl? An diesem eigenen Projekt möchte ich solche Modelle ausprobieren und miteinander vergleichen.&lt;/p&gt;

&lt;h2 id=&quot;der-erste-spielbare-schritt&quot;&gt;Der erste spielbare Schritt&lt;/h2&gt;

&lt;p&gt;Für den Anfang wollte ich nicht gleich die ganze Stadt, Beute und Ausbausysteme bauen. Ich brauchte erst einmal eine Figur, die ich steuern kann, und einen Ort, an dem ein Kampf stattfindet.&lt;/p&gt;

&lt;p&gt;Dafür habe ich bei Mixamo ein Schwert-und-Schild-Modell samt Animationspaket heruntergeladen und ein neues Godot-Projekt angelegt. Mit Unterstützung von GPT-5.6 Luna entstand daraus der erste Prototyp: zwei Szenen, eine Figur mit Animationen und eine Steuerung mit WASD. Da ich das Spiel auf meinem Notebook auch ohne Maus spielen möchte, löse ich die Aktionen über die Tastatur. Mit der Leertaste geht es durch das Portal in die Kampfinstanz, mit J greift die Figur an.&lt;/p&gt;

&lt;p&gt;In der Kampfinstanz tauchen Gegner auf. Sie können mich angreifen, ich kann sie besiegen – und ich kann selbst sterben. Für den Moment ist das der Kern des Prototyps. Spieler und Gegner verwenden noch dasselbe Modell; die Gegner sind lediglich rot eingefärbt.&lt;/p&gt;

&lt;p&gt;Danach kamen nach und nach weitere Elemente dazu: eine Schadensanzeige, eine Minimap und ein erster gegnerischer Angriff mit roter Warnfläche. Bleibe ich darin stehen, nehme ich viel Schaden. Entferne ich mich zu weit von den Gegnern, kehren sie an ihre Ausgangsposition zurück und erhalten ihre volle Energie zurück. Außerhalb des Kampfes soll sich außerdem die Lebensenergie meiner Figur wieder auffüllen.&lt;/p&gt;

&lt;p&gt;Mehr ist es noch nicht – und das ist in Ordnung. Der Wechsel von der Stadt in die Kampfinstanz, der Kampf und die Möglichkeit zu sterben bilden meinen ersten spielbaren Versuch. Ob daraus ein spannender Kreislauf werden kann, muss sich noch zeigen. In den nächsten Teilen möchte ich erzählen, wie ich den Prototyp weiterentwickle und welche Ideen dazukommen.&lt;/p&gt;

&lt;h2 id=&quot;quellen&quot;&gt;Quellen&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/index.html&quot;&gt;Godot Engine: C#/.NET&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mixamo.com/&quot;&gt;Mixamo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://helpx.adobe.com/creative-cloud/help/animate-characters-mixamo.html&quot;&gt;Adobe: 3D-Charaktere mit Mixamo animieren&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
    <category term="gamedev"/><category term="godot"/><category term="rpg"/>
  </entry>
  
</feed>
