我正在 Unity 中撰寫基于 2d 瓷磚的回合制游戲,過去兩天一直在努力解決一個問題。起初,我設法使用 Dijkstra 演算法讓 tile 到 tile 尋路作業。接下來,我嘗試修改代碼以有效地找到角色移動范圍內的每個圖塊
為此,我正在嘗試創建一個回傳字典的方法。鍵是角色移動范圍內所有可到達的 WorldTile 瓦片(WorldTile 是代表游戲中每個瓦片的類),每個鍵的值是 PathAndCost pathAndCost(PathAndCost 是一個存盤 2 個屬性的類:Path,型別為 Queue和成本,型別為 Double)。
這樣,我可以存盤角色可以到達的所有圖塊的串列,同時還存盤每個圖塊的路徑(由圖塊隊串列示)和到達每個圖塊的成本(由 Double 表示)。
但是,在實踐中,該方法存在問題,我無法弄清楚到底是什么問題。通過測驗,我已經確認該方法回傳的字典確實包含所有可到達的圖塊作為其鍵。同時,回傳的 pathAndCost 值只正確了一半。奇怪的是,每個 pathAndCost.Cost 都是正確的。但是, pathAndCost.Path 總是錯誤的。當我檢查正在存盤的路徑的佇列計數時,它始終為 0,這意味著路徑中沒有存盤任何圖塊!
github鏈接到我的腳本
(抱歉,如果我的帖子或代碼的格式混亂,因為我對 stackoverflow 和編程都是新手)
如果您查看我在腳本中撰寫的兩個除錯塊,在 StorePathAndCost 回圈內部,路徑確實正確,因為佇列計數并不總是 0。不知何故,之后出現問題,將路徑設定回為空之前該方法回傳字典。
由于瓷磚鍵和成本值沒有受到影響,我高度懷疑我在 StorePathAndCost 回圈中制作和存盤路徑的方式存在邏輯錯誤。我盯著我的代碼看了很長時間,但不知道它是什么。
編輯:解決了!意識到問題在于 Dequeue() 方法會影響我的路徑值,即使它們存盤在字典中也是如此。
uj5u.com熱心網友回復:
不會涉足你的整個程式代碼,但我會以一個很好的視頻教程的形式提供幫助,展示為你實作尋路的成功方法。
Tarodevs 尋路
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/533276.html
標籤:C#unity3d