Sechseckiges Gitter und bewegungskostenbasierte Routenfindung
Trennung von Koordinaten, Gelände und Bewegungsbereich in ProjectTB
Die in diesem Blog verfassten Artikel wurden mit dem Ziel erstellt, zu unterrichten. Außerdem können die Informationen im Artikel falsch sein, also seien Sie bitte vorsichtig.
Das sechseckige Gitter kann nicht wie ein Quadrat nur vier Richtungen überprüfen: oben, unten, links und rechts. In ProjectTBFTBHexCoordwird als Schlüssel verwendet und GridManager berechnet die Nachbarn und Bewegungskosten.
UPROPERTY(BlueprintReadOnly, Category = "Grid")
TMap<FTBHexCoord, TObjectPtr<ATBHexTile>> Tiles;
Separate Koordinaten und Weltstandort
Die Spielregeln werden mithilfe von Hex-Koordinaten berechnet, ebenso wie das BildschirmlayoutHexToWorld()Konvertieren von
FTBHexCoord
Nachbarsuche/Bereich/Routennavigation
↓ HexToWorld
FVector
Tatsächlicher Standort des Schauspielers
Auf diese Weise ist es nicht erforderlich, die Pfadsuchregeln neu zu erstellen, selbst wenn sich der Kachelabstand oder die Maschenweite ändert.
Der Bewegungsbereich ist nicht nur auf die Entfernung beschränkt.
Ebenes Land kostet 1, Sumpfland kostet 2 und es können unzugängliche Felder vorhanden sein. Wenn Sie lediglich einen Radius von 3 Feldern anzeigen, weicht dieser vom tatsächlichen Bewegungsbereich ab.
Der GridManager von ProjectTB berechnet die kumulierten Bewegungskosten ab dem Startpunkt.
bool FindPath(
ATBHexTile* StartTile,
ATBHexTile* DestinationTile,
TArray<ATBHexTile*>& OutPath,
int32& OutCost
) const;
TArray<ATBHexTile*> GetReachableTiles(
ATBHexTile* StartTile,
int32 MovementBudget
) const;
Diese Struktur ähnelt der Dijkstra-Suche. Es wird ausgehend von der Kachel mit den bisher niedrigsten Kosten erweitert. Wenn eine günstigere Route gefunden wird, werden die Kosten und die vorherigen Koordinaten aktualisiert.
Das Wichtigste bei der Implementierung eines sechseckigen Gitters ist, kein sechseckiges Netz zu zeichnen. Durch die Aufteilung der logischen Koordinaten, des Weltstandorts, der Geländekosten und des Belegungsstatus in verschiedene Verantwortlichkeiten wird das Überleben bei zunehmenden Bewegungsregeln erleichtert.