我正在为平台游戏寻找路径。我在 unity3d 中使用 A* 并遵循本教程,尽管有一种方法我不明白。
public Node NodeFromWorldPoint(Vector3 worldPosition) {
float percentX = (worldPosition.x + gridWorldSize.x/2) / gridWorldSize.x;
float percentY = (worldPosition.z + gridWorldSize.y/2) / gridWorldSize.y;
percentX = Mathf.Clamp01(percentX);
percentY = Mathf.Clamp01(percentY);
int x = Mathf.RoundToInt((gridSizeX-1) * percentX);
int y = Mathf.RoundToInt((gridSizeY-1) * percentY);
return grid[x,y];
}
它似乎正在获得点在网格中的位置的百分比值。但我无法理解如何。
float percentX = (worldPosition.x + gridWorldSize.x/2) / gridWorldSize.x;
首先,我们计算一个介于 0% 和 100% 之间的百分比,以确定您在 A* 网格中向右多远。我假设 whenworldPosition
等于(0, 0, 0)
,这意味着您位于探路者网格的中心。所以percentX
应该是 0.5 (50%)。
对于位置 (0, 0, 0),上面的代码行结果为(0 + gridWorldSize.x/2) / gridWorldSize.x
,等于 0.5。
当您向左移动时,worldPosition.x
变得更负,因此percentX
会根据上述公式减少。当您向右移动时,worldPosition.x
变得更加积极,因此percentX
会根据上述公式增加。
percentX = Mathf.Clamp01(percentX);
将百分比限制在 0% 到 100% 的范围内
int x = Mathf.RoundToInt((gridSizeX-1) * percentX);
根据您在网格中的位置确定 A* 节点。例如,如果您的网格有 10 个节点并且您在整个网格中占 30% ( percentX
== 0.3),那么您在节点 3 中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句