我正在Unity中编写一个基于2D图块和回合制的游戏,在过去的两天里,我一直在努力解决一个问题。首先,我设法使用Dijkstra算法进行图块到图块的寻路。接下来,我尝试修改代码,改为高效地对角色移动范围内的每个图块进行寻路
为此,我尝试创建一个返回字典的方法。键是角色移动范围内所有可达的WorldTile瓷砖(WorldTile是一个表示游戏中每个瓷砖的类),每个键的值是一个PathAndCost pathAndCost(PathAndCost是一个存储2个属性的类:路径,类型为Queue,成本,类型为Double)。
通过这种方式,我可以存储一个字符可以到达的所有瓷砖的列表,同时还存储到每个瓷砖的路径(由瓷砖队列表示)和到达每个瓷砖的成本(由Double表示)。
但是,在实际操作中,这个方法有问题,我无法确定到底是哪里出了问题。通过测试,我已经确认了这个方法返回的字典确实正确地包含了所有可到达的tile作为它的键。同时,返回的pathAndCost值只有一半正确。奇怪的是,每个pathAndCost.Cost都是正确的。但是,pathAndCost。路径总是错误的。当我检查存储的路径的队列计数时,它总是0,这意味着没有瓷砖存储在路径中!
github link to my script
(抱歉,如果我的帖子或代码的格式是混乱的,因为我是新的stackoverflow和编程)
如果您查看我在脚本中编写的两个Debugging块,在StorePathAndCost循环中,路径确实是正确的,因为队列计数并不总是0。不知何故,之后出现了一些错误,在方法返回字典之前将路径设置回空。
由于tile键和cost值没有受到影响,我高度怀疑在StorePathAndCost循环中创建和存储路径的方式存在逻辑错误。我盯着代码看了很久,但无法找出错误所在。
编辑:解决了!意识到问题出在Dequeue()方法上,它影响了我的路径值,即使它们已经存储在字典中了。
1条答案
按热度按时间nlejzf6q1#
我不打算在你的整个程序代码中费力,但我会以一个很好的视频教程的形式提供帮助,展示一个成功的方法来实现寻路。
Tarodevs Pathfinding