C# 从空间中的工作点获取节点

C# 从空间中的工作点获取节点,c#,unity3d,C#,Unity3d,我试图从世界空间的某个位置获得一个节点。节点以网格方式排列 下图显示了节点的网格是如何排列的,每个大网格编号为0-3 由50 x 50的节点网格组成 每个网格中的红点表示在单击世界中的某个点时检查了哪些节点 对于标记为0的大网格,每个节点都可以正确访问 栅格1具有正确的X值(从左到右的位置),但Z夹持在栅格顶部 栅格2与之相反,其中X值固定在顶部范围,Z值正确 栅格3 X和Z均被钳制为最大值。 下面是来自世界位置的网格代码 public Node NodeFromWorldPoint(

我试图从世界空间的某个位置获得一个节点。节点以网格方式排列

下图显示了节点的网格是如何排列的,每个大网格编号为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];
}

如果我理解正确的话,这应该对你有用。它包括节点的下边界,不包括上边界。。i、 如果你给世界点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];
}

是否要获取单击的节点?还是光标下的节点?或者仅仅是世界空间中特定点上的一个节点?请发布完整的脚本以便更好地理解。您可以使用OnClickEvent、RayCast或Physics.OverlapSphere,具体取决于urrequirement@HassaanAkbar节点作为世界空间中的特定点,传递给函数的世界位置向量3来自使用ScreenPointToRay的光线投射你所说的节点是什么意思?它是2D项目吗?还是与GUI相关?