各位程序员,
首先,我想解释我的任务的目的,即创建一个可交互的 UI 网格,用户可以在其中选择他感兴趣的任何网格元素。(这已经完成,使用网格布局组 - 见附图)
整个网格应该代表一个真实大小的平方区域,这是我从数据中获得的,由长度和宽度组成。从数据来看,我还有一个事件列表,其中包含某些现实生活中的事件和每个事件的位置数据 (x,y)。因此,当用户选择一个网格元素时,我希望它代表该位置范围内的所有事件。
我的想法:目前为止是想找到一种计算方法来获得UI网格相对于现实生活大小的大小。但我需要一种方法来实际获得网格的大小(非硬编码)。然后访问并排序每个子元素,因此如果已单击附加图像的元素将等于 (0,0)、(0,1) 和 (0,2),因此我可以遍历每个子元素元素
我知道这是一个混乱的解释,但我希望它有点道理。
答案 0 :(得分:0)
我猜您需要进行以下计算:
鉴于您的网格的 TotalWidth
、TotalHeight
和 CellWidth
、CellHeight
以及 Position
内的 TotalWidth/TotalHeight
。其中 TotalWidth 是网格的 X 宽度,CellWidth 是单元格的 X 宽度,在网格中定位位置。
CellIndexX = Position.X % (TotalWidth / CellWidth);
CellIndexY = Position.Y / (TotalHeight / CellHeight);
TotalWidth / CellWidth
基本上计算 X 轴上的单元格数量,Y 轴上的单元格数量也是如此。
这应该允许您通过索引获取单元格,例如:
int TotalWidth = 4000;
int TotalHeight = 2000;
int CellWidth = 20; // TotalWidth / CellWidth = 4000/20 = 200 grid tiles on the x-Axis
int CellHeight = 20; // TotalWidth / CellWidth = 4000/20 = 100 grid tiles on the y-Axis
Cell[,] myGrid;
Cell GetCellForPosition(Vector3 Position)
{
CellIndexX = Position.X % (TotalWidth / CellWidth);
CellIndexY = Position.Y / (TotalHeight / CellHeight);
Cell result = myGrid[CellIndexY, CellIndexX];
return result;
}
对于现实世界的大小与网格大小,您可以使用三法则。或者更简单,你只是想出一个因素
如果 RealWorldSize 是:120X meters * 90Y meters
并且您希望网格为 100X
米,那么您的因子将是:100/120 = 0.8333
,然后您可以使用它来计算网格的 Y 高度:YGridHeight = 90 * 0.833 = 75;
>