Tagebuch: Black Planet

Moin,

ich versuch auch mal was. Auf Grund von Familie & Arbeiten wird das wohl eher langsam vorwärts gehen.


Mir schwirrt schon seit Ewigkeiten (Jahrzehnte) ein Weltraumspiel durch den Kopf. Ich habe mal etwas in der Richtung auf meinem Amiga gespielt, allerdings gegen KI. Nun wird es Zeit das Ganze auf Bits zu bringen.

Sonst fange ich immer einfach an Code zu schreiben. Liegt vermutlich an meiner Vergangenheit, habe mir das Programmieren auf einem KC85 selber bei gebracht. Im Studium hat man ja gelegentlich auch Projektmanagment. Dort lernt man auch, das man zuerst ein Lastenheft machen sollte, um zu sehen ob alles passt.

Und ja - es lohnt sich zuerst ein Lastenheft zu schreiben. Ich merke gerade wie viel Details mir eigentlich unklar sind, während das Spiel selber schon im Kopf fertig ist :dizzy_face: . Zumal ich mit dachte, schreibst Du schnell mal 4 Seiten. Inzwischen sind es 18 Seiten und noch ist lange nicht Ende.

Gleichzeitig nutze ich das Lastenheft aber auch um mich mit Latex auseinander zu setzen. Ist total genial das ich mich nur um den Inhalt kümmern muss, während Latex erfolgreich sich um das Layout des Lastenheftes kümmert. Es war nur Einarbeit in das Erstellen des Layouts nötig. Aber wenn das Layout steht, dann wird es automatisch überall verwendet.

Auch genial sind die möglichen verschiedenen Paket von Latex. Von Hochformat auf Querformat wechseln → Paket einbinden und zwei Befehle verwenden - Thema erledigt. Daten im CSV-Format vorhanden. Passendes Paket einbinden, Befehl verwenden, Tabelle wird angezeigt. Perfekt. Wie immer hilft Google und das Internet.

Im Anhang ist ein 4 seitiger Auszug aus meine aktuellen Dokumentation, inkl. CSV-Tabelle.


Erfahrung in Sachen Online-Spiele habe ich schon mit www.fantasya-pbem.de gemacht. Ich hatte das Spiel damals komplett neu geschrieben und bis zu meiner Scheidung auch aktiv Weiterentwickelt. Zu Scheidung habe ich dann alles, inkl. Server abgegeben. Was bei Fantasya fehlt, ist ein richtiger Client. Damit war das Spiel bzw. Prinzip nur für Informatiker und Nerds benutzbar. Black Planet wird definitiv einen Spielclient bekommen. Ohne wird das eine Totgeburt. Dann ist an Geldverdienen überhaupt nicht zu denken.

Im Moment bin ich tendiere ich zu Unity für den Spielclient. Erste Blicke in den Asset-Store zeigen zumindest das die Auswahl an Planeten reichlich ist. Weitere erste Objekte werde ich dort sicher auch finden. Außerdem bietet mir Unity die Möglichkeit einmal etwas zu Programmieren und es ist auf vielen System Lauffähig. Und ich kenne C# aus beruflichen Gründen.

Der Server wird Java werden. Da ich C# nicht mittels Mono auf Linux laufen lassen will. .NET Core finde ich noch nicht stabil genug und ich vertraue Microsoft nicht, das nicht in 3 Jahren wieder alles besser wird. Ich finde Java an der Stelle langlebiger.


Gedankenspiele BlackPlanet (119,8 KB)

Finds cool zu sehen, wie hier immer mehr Ihre Projekte hier vorstellen und Tagebuch drüber führen wollen :slight_smile:.

Mir gefällt auch deine Technologie auswahl - würde ich vermutlich nämlich ganz genauso machen. Unity fürn Client und Java (Spring Boot) als Backend.

Und vor allem dürfte es TMII freuen, dass hier das 3te Weltraumspiel entsteht :stuck_out_tongue:.

Wobei ich das eher für Gefährlich halte. Ich hatte das ja mit Industry City auch gemacht. Ich wusste alles über mein Spiel - hatte aber durch die vielen Ideen es nicht hinbekommen ein wirkliches MVP zu definieren.

Wenn du mit Unity arbeitest - dann würde ich dir auch Prototyping nahe legen. Da du schon viel durch die Engine abgenommen bekommst, erzielt man relativ schnell einen guten Prototypen. Und zumindest mir hat das sehr gut geholfen gehabt mein Spiel besser zu verstehen und Entscheidungen zu treffen.

Das war eher um den Kopf frei zu bekommen bzw. eine Linie in das Chaos zu legen. Und ja es hat sich gelohnt. Einige Dinge sind jetzt klarer wie ich es machen werden oder es ist klar das ich an anderen Stellen nochmal nachdenken muss. Im Grunde ist die Spieleentwicklung ein F&E-Projekt. Keiner weis genau wie es gemacht werden kann. Irgendwas wird immer „vergessen“ oder geändert. (Anders ist es wenn ich meine Software ans Amt verkaufen, das ist immer irgendwie gleich…). Daher ist eine exakte Spezifikation sehr aufwendig (um festzustellen das es so doch nicht funktioniert)

Ansonsten habe ich inzwischen angefangen den Client mit Unity zu entwickeln. Das wichtigste ist in meiner Doku schon mal vorhanden. Was noch fehlt ist eh einige Monate in der Zukunft, kann ich also später noch was zu schreiben.

Die Registrierung ziemlich fertig (Passwort vergessen fehlt). Der Server verarbeitet das auch soweit und trägt es in die DB ein, verschickt die Mail mit dem Passwort. Das war ziemlich viel Grundlagen in Sachen „wie mache ich das mit Unity“, aber es hat sich gelohnt.

kleiner Status: Linux | Windows | Android
Steuerung mit WASD und Registrierung ist deaktiviert

Ich verstehe die Vorteile schon. Sein Projekt zu kennen hat sich lange Zeit ziemlich gut angefühlt. An deinem aktuellen Stand erkenne ich auch durchaus meine damalige Projektstruktur wieder (eben, dass schon viel drum rum passiert ist. Auch die bereits vorhandene Detailtiefe).

Sagen wirs mal so: nur weil der Ansatz für mich damals nicht funktioniert hat, muss das ja auch nicht für dich gelten. Da ich das Gefühl hab an der Stelle etwas missionarisch rüber zu kommen (was ich nicht möchte), lass ichs einfach mal gut sein ^^.

Ich hab das Spiel mal gestartet (die Win-Version) und was da ist gefällt mir schon sehr gut. Die Planeten sehen echt gut aus und ich mag die Animationen der Sonne (u.a. im Hauptmenü).

Bin mal gespannt auf Updates.

im Moment diskutiere (okay, ich versuche sie zu verstehen) ich mit der UI rum, das die Buttons auch in allen Auflösungen sind, wo sie sein sollen…

Dafür ist eigentlich der Canvas-Scaler ganz gut geeignet (die Komponente ist standardmäßig bei deinem Canvas mit dabei). Bei mir schaut die so aus:

image

bei mir auch :slight_smile:

allerdings ist in der Demo-Version das mit dem Zahnrad (oben rechts, im Sol) schön zu erkennen. Der Anchor liegt auf der Ecke, aber bei 1024x768 ist das Zahnrad woanders als bei 1920x1080…

Der Link ist leider expired.

muss ich also doch erst runter laden -> x8games.de

Kann ich hier gerade schlecht nachprüfen. Würde jetzt aber für mich danach klingen, als ob du alles „absolut“ ausrichtest anstatt die Layout-Möglichkeiten mit Pivot-Point & Co zu nutzen. Da kannst du z.B. sagen: „klatsch das teil in die obere rechte Ecke des Containers“. Und dann ist das auch wirklich da.

ich habe jetzt nochmal ein Demo-Projekt aufgesetzt. Da funktioniert es so wie Du es machst bzw. die Anleitung es auch beschreibt. Muss mal ins eigentliche Projekt schauen, was da schief läuft. Die Pivot benutze ich eigentlich.

ich habe den Fehler gefunden - wie schon geschrieben, die Pivot-Punkte nutze ich eigentlich.

Ich habe ja pro Szene verschiedene Message-Boxen. Alle Elemente dieser Boxen sind unterhalb eines leerem GameObject. Dieses leere GameObject ist direkt als Kind des Canvas. Und das Canvas hat die passenden Einstellungen. Durch diese leere GO kann ich die einzelnen Boxen ein- und ausblenden.

Und das Problem ist eben dieses GO. Es hat nur eine feste Größe von 100x100 und passt sich nicht automatisch dem Screen an. Bisher waren die Boxen immer in der Mitte angeordnet und damit fiel das Problem nicht auf. Erst im Sonnensystem war das Zahnrad oben rechts angeordnet, entsprechend mit Pivot. Nur hat sich das GO nicht angepasst und damit war das Zanhrad unterschiedlich je nach Auflösung.

Das leere GO mus auf Auto-Size gesetzt werden - dann klappt auch alles.

sooo … ich sitze im Moment wieder am Reißbrett, aber

Das Positive zu Erst. Ich habe endlich raus gefunden wie ich zu Laufzeit Planetenoberflächen selber erstellen kann. Man kann ja eine Texture einfach bemalen. Zwar recht simpel nur die einzelnen Pixel, aber es ist auch möglich sich dann passende Funktionen zu basteln. Damit bin ich an der Stelle nicht mehr auf fertige Texturen/Prefabs angewiesen und kann das Sonnensystem mehr an meinen Wunsch orientieren.

Nun zum Reißbrett. Ich bin mir nicht sicher ob ich, wie im Demo, die Planeten stehen lasse - auf einer Seite der Sonne. Ob ich sie auf der Seite ein bisschen schwanken lasse. Oder ob ich die Planeten generell einmal um die Sonne kreisen lasse. Und gerade um Letzteres geht es. Ich muss mir einmal ernsthaft Gedanken machen, wie das Fliegen von Planet zu Planet genau passieren soll. Es bringt nichts wenn man ein 10+ Runden warten muss, bis das Raumschiff auf den äußeren Planeten angekommen ist. Wenn es aber innerhalb einer brauchbaren Zeit passiert, dann würde ich mich nämlich schon gerne für ein realistischeres Sonnensystem entscheiden.

OpenGL und DirectX bieten Beide die Möglichkeit den Frame Buffer bzw. das Render Target auf eine Textur zu wechseln. Das nutze ich bei mir um das Raumschiff einmalig in eine Textur dynamisch zu prerendern (als wie wenn ich das auf den Bildschirm rendern würde) und zeichne dann nur noch die fertige Textur als Quad auf den Bildschirm.

Das lässt sich in Unity doch bestimmt auch irgendwie bewerkstelligen. Dann kannst du auch direkt Shader einsetzen.

ja - man muss nur die API dazu finden :slight_smile:

Die Kamera kann man ja direkt auf eine Plane rendern zu lassen. Ist nur doof, da ich im Sonnensystem nicht die Planetenoberflächen habe. Also kann ich das erstmal vergessen. Also war der Gedanke die Textur selber zu berechnen und ein paar Pixel/Rechtecke/Linien/Kreise zu Zeichen (Texture 32x32 oder so). Nur bietet Unity kein System.Drawing.Image…

Also Google bemüht und selbst mit dem Schlüsselwort „runtime“ kamen da (erstmal) nur Vorschläge wie „in die Hierachy ziehen“ - unter „runtime“ verstehe ich anscheinend was anderes. Irgendwann habe ich eine Erweiterungsmethode in Unity zum Laden von PNG etc. gefunden. Das wird dann direkt in einen Textur geladen. Theoretisch perfekt, nur fehlt die Möglichkeit eine Image zu zeichen. Scheint die Mono-Variante von Unity gestrichen zu haben.

Nun habe ich die Wahl mit Texture.SetPixel() alles einzeln zu malen oder ich lasse auf dem Server die Textur zeichenen und schicke sie an den Client. Wobei letzteres würde ich ungern machen, ich wollte eigentlich soviel Rechenleistung wie möglich auf den Client verlagern.

Moin, kleiner Zwischenbericht,

im Moment bin ich am Ausarbeiten für die Sonnensysteme, also wie sie ungefähr mit den einzelnen Planetentypen “besiedelt” werden. Es gibt inzwischen sechs verschiedene Planetentypen, die eine eine gewissen Häufigkeit im Abstand zu Sonne haben. Ziemlich weit draußen mehr Eisplaneten, während im inneren eher Lavaplaneten auftauchen.

Als Grundlage für die Verteilung habe ich Gauß aus Grundlage genommen und ein bisschen mit den einzelnen Kennwerten rum gespielt. Die dicken Linien sind die gewünschte Verteilung der einzelnen Planeten im Sonnensystem. Die gepunkteten die reale Verteilung im Zusammenhang mit den anderen Planeten.

image

Mein aktueller Planetengenerator. Ich bin von der Idee weg, die generierte Oberfläche (Regionen) als Textur zu erstellen. 16x16 Pixel sehen einfach “bescheiden” aus.

so …

im Moment scheint der Crash am Treiber in Linux zu liegen. Nicht mal das LWRP-Demo Projekt ließ sich starten (da ist Unity gleich abgestürzt). Im Projekt selber scheine ich einen Weg gefunden zu haben, um den Crash auszulösen.

Nun habe ich direkt von AMD den Treiber installiert und ich kann den Crash im Moment nicht mehr auslösen. Dafür spinnt jetzt Maxdome rum. Das klingt manchmal wie eine Schallplatte mit Sprung. Da wird alles im Sekundentakt wiederholt (gerade wenn irgendwie die Grafikkarte mehr benötigt wird).

Ich schau mal ob ich so weiter arbeiten kann…

okay … die Crashs scheine ich erstmal unter Kontrolle zu haben (Desktopeffekte deaktiviert) … die Zwillinge schlafen schon, kein Mittagsschlaf macht doch was aus :smiling_imp: … ich bin etwas motiviert

Ich werde mal jetzt mich daran machen was ein Planet alles haben muss (Mond, Asteroiden, …) und mir dazu mal ein oder zwei DB-Tabellen einfallen lassen. Dann wie ein Sonnensystem aussehen kann und noch ein bisschen mehr DB-Tabellen ausdenken. Also wieder erstmal Theorie und Fahrplan erstellen. Dann Werde ich meinen Planeten-Tester überarbeiten (siehe oben)

:crazy_face: VS Code missing UnityEngine.UI - Unity Answers