网格布局组 - 孩子的位置和排序

时间:2021-06-28 11:03:19

标签: c# unity3d scaling grid-layout

各位程序员,

首先,我想解释我的任务的目的,即创建一个可交互的 UI 网格,用户可以在其中选择他感兴趣的任何网格元素。(这已经完成,使用网格布局组 - 见附图) enter image description here

整个网格应该代表一个真实大小的平方区域,这是我从数据中获得的,由长度和宽度组成。从数据来看,我还有一个事件列表,其中包含某些现实生活中的事件和每个事件的位置数据 (x,y)。因此,当用户选择一个网格元素时,我希望它代表该位置范围内的所有事件。

我的想法:目前为止是想找到一种计算方法来获得UI网格相对于现实生活大小的大小。但我需要一种方法来实际获得网格的大小(非硬编码)。然后访问并排序每个子元素,因此如果已单击附加图像的元素将等于 (0,0)、(0,1) 和 (0,2),因此我可以遍历每个子元素元素

我知道这是一个混乱的解释,但我希望它有点道理。

1 个答案:

答案 0 :(得分:0)

我猜您需要进行以下计算:

鉴于您的网格的 TotalWidthTotalHeightCellWidthCellHeight 以及 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;