【发布时间】:2016-08-26 03:25:05
【问题描述】:
我试图让一个节点在世界空间中形成一个位置。节点以网格方式排列
下图显示了节点网格是如何编号为 0 - 3 的每个大网格 由 50 x 50 的节点网格组成。
每个网格中的红点表示当单击世界中的某个点时检查了哪些节点。
对于标记为 0 的大网格,每个节点都可以正确访问
网格 1 具有正确的 X 值(从左到右的位置),但 Z 被夹在网格的顶部
网格 2 正好相反,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 相关?