Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

1

03.04.2015, 18:55

Geländefeldbasiertes Strategiespiel

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

Julién

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

2

11.04.2015, 22:40

In Unity habe ich es immer so getan:

1. Ermittle Punkt über Raycast
2. Vektor der als Ergebnis rauskommt komponentenweise gerundet.
3. Erstelle neues Objekt an jener Stelle (aber Ghostmodus, quasi die Vorschau)
4. Platziere wenn das Objekt nicht mit einem anderen kollidiert.

Dadurch habe ich es mir sehr einfach gemacht und es scheint bisher problemlos zu funktionieren.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

3

12.04.2015, 00:32

Ja, aber mir geht es um das Tiling, also zu erkennen, wieviel Tiles etc. ;)

Ich habe, da nur rechteckige Gebäude, es so gemacht, die Seitenlängen selber anzugeben.

Zu deinem Ghost, ist das einfach nur dasselbe Modell mit anderem Material?

Julién

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

4

12.04.2015, 20:44

Wegen dem Ghost: Ich war so dreist nur den Alphawert zu erhöhen.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Werbeanzeige