← SEARCHABLE ARCHIVE
Unreal Engine · 2026-07-08

基於六邊形網格和移動成本的路徑查找

ProjectTB 中座標、地形和移動範圍的分離

INTERACTIVE READING MODE →

該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。

六邊形網格不能像正方形一樣只檢查上、下、左、右四個方向。 在TB專案中FTBHexCoord用作按鍵,GridManager 計算鄰居和移動成本。

UPROPERTY(BlueprintReadOnly, Category = "Grid")
TMap<FTBHexCoord, TObjectPtr<ATBHexTile>> Tiles;

單獨的座標和世界位置

遊戲規則使用十六進位座標計算,螢幕佈局為HexToWorld()轉換自

FTBHexCoord
鄰居搜尋/範圍/路線導航
        ↓ HexToWorld
FVector
演員的實際位置

這樣,即使圖塊間距或網格尺寸發生變化,也無需重新建立路徑搜尋規則。

移動範圍不僅限於距離。

平原土地成本為1,沼澤成本為2,並且可能存在無法到達的瓷磚。 如果只是顯示3個空格的半徑,就會與實際的移動範圍有所不同。

ProjectTB 的 GridManager 計算從起點開始的累積行動成本。

bool FindPath(
    ATBHexTile* StartTile,
    ATBHexTile* DestinationTile,
    TArray<ATBHexTile*>& OutPath,
    int32& OutCost
) const;

TArray<ATBHexTile*> GetReachableTiles(
    ATBHexTile* StartTile,
    int32 MovementBudget
) const;

這個結構類似 Dijkstra 搜尋。 它從迄今為止成本最低的圖塊開始擴展,如果找到更便宜的路線,則更新成本和先前的座標。

實現六邊形網格的重要之處不是繪製六邊形網格。 將邏輯座標、世界位置、地形成本和占用狀態分離到不同的職責中,可以隨著移動規則的增長而更容易生存。