Hallo liebe Community,
da ich mit ein paar Freunden bald ein neues Projekt starte, mache ich mir im Moment schon Gedanken über gewisse Konzepte bzw. versuche gewisse Grundkonzepte schon umzusetzen.
Das Spiel ist ein Aufbaustrategiespiel (3D) im Kleinformat. Das Prinzip basiert dabei auf Geländefeldern. Also die ganze Map ist eine Matrix und in jedem Feld befindet sich maximal ein Objekt, mit Ausnahme sich bewegender Personen.
Ich überlege gerade wie ich das am besten umsetze und möchte euch meine Überlegungen zeigen, in Hoffnung dass jemand mir sagen kann, was vielleicht besser geht oder nicht. Bei vielen Sachen bin ich mir noch nicht sicher oder weiß noch nicht wie ich das machen will.
Weil ich aber weiß dass ich bestimmt nicht der Einzige bin der so etwas macht, möchte ich das Rad nicht neu erfinden und hoffe jemand kann mir Denkanstöße geben oder weiterhelfen.
Im Voraus: Ich arbeite mit Unreal Engine 4, es ist nicht wie in Civilization, sondern eher wie in Caesar / Banished, so muss man das sich ungefähr vorstellen.
Also. Ich habe überlegt, es gibt einen Actor, der das TileSystem repräsentiert. Man kann die Dimensionen einstellen, also Tile-Breite-Höhe und Anzahl der Tiles in Breite und Höhe.
Der TileManager hat eine Plane, die er dann entsprechend skaliert und der ich dann ein Material zuweisen kann. Der Rest (also Bauplatzfärbungen) wird drübergemalt per Decal.
Tiles sind keine einzelnen Objekte/Actors, sondern sind in einem Array gespeichert. Der Tilepivot ist linksoben, die Tile-ID-Nummerierung geht von linksoben nach rechtsunten, Reihe für Reihe.
Es gibt eine Struktur, die enthält nur eine ID und einen Pointer auf einen Actor (der die Tile besetzt). Über ID lässt sich mit Hilfe der eingestellen Dimensionen ja die Position berechnen und damit auch z.B. ob eine Position in einem Tile liegt, was der TileManager auch unterstüzt als Funktion.
Der TileManager hat die Tiles in einem Array wie schon gesagt.
Das größte Problem für mich ist jetzt, wie ich das mit Modellen z.B. Gebäuden vereinbare.
Entweder ich lasse das automatisch erkennen. Um Fehler durch Genauigkeit oder Modelldimensionen zu vermeiden, gibt es einen kleinen Toleranzbereich, der Pivot der Modelle liegt links oben auf Grundhöhe, das System erkennt automatisch wieviele Tiles benötigt werden, alignt den Modellpivot mit dem nähesten Tilepivot und besetzt die Felder automatisch.
Das ganze wäre dann kompatibel zu verschiedenen Tilegrößen.
Hier weiß ich allerdings nicht wie ich es umsetzen soll. Bei nur rechteckigen Objekten ist das ja kein Problem, hier kann ich mit den Dimensionen der Bounding Box arbeiten um die benötigten Tiles zu erkennen. Wenn es aber andere Formen annimmt, habe ich für mich ein Problem. Vielleicht weiß jemand hier, wie ich das umsetzen kann.
Die zweite Möglichkeit wäre, dass ich das selber festlege, wieviele Tiles benötigt werden. Auch hier kann ich wieder einfach Rechtecksdimensionen angeben (z.B. 5 * 5 Tiles), außer wenn die Objekte keine Rechtecke sind, dann wird es komplizierter.
Vielleicht hat schon jemand Erfahrung mit sowas gemacht und kann mir etwas auf die Sprünge helfen, ob meine bisherigen Überlegungen gut sind und wie ich am besten weiterarbeite.
mfg