【问题标题】:Getting a Node from a work point in space从空间中的工作点获取节点
【发布时间】:2016-08-26 03:25:05
【问题描述】:

我试图让一个节点在世界空间中形成一个位置。节点以网格方式排列

下图显示了节点网格是如何编号为 0 - 3 的每个大网格 由 50 x 50 的节点网格组成。

每个网格中的红点表示当单击世界中的某个点时检查了哪些节点。

对于标记为 0 的大网格,每个节点都可以正确访问

网格 1 具有正确的 X 值(从左到右的位置),但 Z 被夹在网格的顶部

网格 2 正好相反,X 值被限制在顶部范围,Z 值是正确的

网格 3 X 和 Z 都被限制在最大值。

下面是从世界位置获取网格的代码

    public Node NodeFromWorldPoint(Vector3 worldPosition)
{

    //Gets the Large grid number 0-3
    float Largex = worldPosition.x / (4 * gridWorldSize.x);
    float LargeZ = worldPosition.z / (4 * gridWorldSize.z);
    Largex = Mathf.Clamp01(Largex);
    LargeZ = Mathf.Clamp01(LargeZ);
    int lx = Mathf.RoundToInt((2 - 1) * Largex);
    int lz = Mathf.RoundToInt((2 - 1) * LargeZ);

    int tilenumber = lx * 2 + lz;

    //get the position of the smaller grid
    float percentX = worldPosition.x / (gridWorldSize.x * 2 );
    float percentZ = worldPosition.z / (gridWorldSize.z * 2);
    percentX = Mathf.Clamp01(percentX);
    percentZ = Mathf.Clamp01(percentZ);
    int x = Mathf.RoundToInt((gridSizeX - 1 ) * percentX);
    int z = Mathf.RoundToInt((gridSizeZ - 1) * percentZ);
    var gc = grids.ElementAt(tilenumber);
    return gc[x, z];
}

【问题讨论】:

  • 你想获取被点击的节点吗?还是光标下的节点?还是只是世界空间中特定点的一个节点?
  • 请发布完整的脚本以便更好地理解
  • 你可以根据你的要求使用 OnClickEvent、RayCast 或 Physics.OverlapSphere
  • @HassaanAkbar 节点作为世界空间中的特定点,传递给函数的世界位置向量 3 来自使用 screenPointToRay 的光线投射
  • 节点是什么意思?它是一个 2D 项目吗?还是与 GUI 相关?

标签: c# unity3d


【解决方案1】:

如果我理解正确,那么这应该对你有用。它包括节点的下边界并排除上边界..即如果你给世界点 2,0 那么它将返回第二个节点。

 public Node NodeFromWorldPoint(Vector3 worldPosition)
{

    //Gets the Large grid number 0-3
    int LargeX = (int)worldPosition.x / (2 * gridWorldSize.x);
    int LargeZ = (int)worldPosition.z / (2 * gridWorldSize.z);
    int tilenumber = LargeX*2 + LargeZ;

    //get the position of the smaller grid
    float percentX = worldPosition.x/gridWorldSize.x - LargeX;
    float percentZ = worldPosition.z/gridWorldSize.z - LargeZ;

    int x = (int)percentX/gridSizeX;
    int x = (int)percentZ/gridSizeZ;

    var gc = grids.ElementAt(tilenumber);
    return gc[x, z];
}

【讨论】:

    猜你喜欢
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2023-03-26
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多