这种方法如何从 A* 网格中获取节点?

南瓜

我正在为平台游戏寻找路径。我在 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

这种方法如何从二维数组中获取正确的对角线?

如何优化在Java中这种方法吗?我得到的时间超限

为什么Go中没有推广这种方法?

在CakePHP中,这种方法是否比requestAction更好?

在Java中,这种方法重载是什么?

用这种方法在CSS中创建类是正确的吗?

如何从节点列表中的节点获取属性?

如何从 XML 文件中获取节点和节点的子节点?

如何使这种方法更通用

如何使这种方法更简洁?

如何使这种方法可重用?

如何使这种方法可重用?

如何在全局使用这种方法?

如何测试这种方法?(R规格)

在Google路径中的坐标之间插入点的最佳方法是什么?这种方法正确吗?

如何从 OpenMesh 中的网格实例获取 MeshHandle?

如何更改Cytoscape.js网格中单个节点的颜色

这种方法是否可以跟踪子组件中@input变量的变化?

为什么 repaint() 在这种方法中不能正常工作

这种方法是否比仅在Task.Run中触发stream.Read()好?

为什么不推荐使用这种方法在chai中检查lengthOf()数组?

java中数组的这种方法声明的正确语法是什么?

如何在 Firebase for Android 中获取根节点的子节点

如何获取jtree中根节点的所有子节点?

单击树中的新节点时,如何获取旧节点?

如何从Firebase中的父节点获取所有子节点?

如何获取Firebase中父节点的嵌套节点数

如何从Xpath中的父节点获取所选节点的位置

如何在android中从Firebase获取子节点的子节点?