Laya 踩坑日記 ---A* 導航尋路

nuolo發表於2021-01-14

要做尋路,然後看了看laya 官方的例子,感覺看的一臉懵逼,早了半天的api 也沒找到在哪有尋路的,最後一看程式碼,原來是用的github上的A星方案  https://github.com/bgrins/javascript-astar

這就尷尬了,,然後研究了一下,果然還是要unity支援,匯出烘焙過的地圖資訊,在網上找了一些方案,然後自己也做了一下修改和調整,現在給大家發出來,(當做參考用 。。。)

需要unity 外掛 A*   (AstarPathfindingProject  )

然後配置好地圖,然後烘焙

 

然後 通過AstartExpLayaTool  /exp json   匯出地圖的json資訊 (json資訊 已自動複製到 剪下板中了)

在通過laya 去呼叫

 

Laya 這邊 將json 資訊給存起來然後呼叫

通過github 把 astar.js 給下載下來,然後放到專案的libs下,編寫  .d.ts  輔助檔案

 

declare class astar {
      /**
         * Perform an A* Search on a graph given a start and end node.
         * @param {Graph} graph
         * @param {GridNode} start
         * @param {GridNode} end
         * @param {Object} [options]
         * @param {bool} [options.closest] Specifies whether to return the
                     path to the closest node if the target is unreachable.
        * @param {Function} [options.heuristic] Heuristic function (see
        *          astar.heuristics).
        */
    static search(graph, start, end, options?);
    cleanNode(node);
}

declare class Graph {
    /**
     * A graph memory structure
     * @param {Array} gridIn 2D array of input weights
     * @param {Object} [options]
     * @param {bool} [options.diagonal] Specifies whether diagonal moves are allowed
     */
    constructor(gridIn, options?)
    grid: any;
   
}

declare class GridNode {
    x;
    y;
    weight;
    constructor(x?, y?, weight?)
}

然後編寫自己尋路程式碼就行了

 

 

備註:此方案當前效能偏低,將座標對應矩陣部分有問題,但作為一個參考還是可以的

laya地址  https://gitee.com/eryuefeng/laya-astar-pathfinding

 

相關文章