此方法如何从 A* 网格中获取节点?
How does this method get a node from a A* grid?
我正在为平台游戏寻找路径。我在 unity3d 中使用 A* 并遵循 this 教程,尽管有一种方法我不明白。
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* 网格中的右侧距离。我假设当 worldPosition
等于 (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.
我正在为平台游戏寻找路径。我在 unity3d 中使用 A* 并遵循 this 教程,尽管有一种方法我不明白。
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* 网格中的右侧距离。我假设当 worldPosition
等于 (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.