【问题标题】:Grid Layout group - Child's positions and sorting网格布局组 - 孩子的位置和排序
【发布时间】:2021-09-10 16:34:29
【问题描述】:

各位程序员,

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

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

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

我知道这是一个混乱的解释,但我希望它有某种意义。

【问题讨论】:

    标签: c# unity3d scaling grid-layout


    【解决方案1】:

    我猜你需要以下计算:

    给定网格的TotalWidthTotalHeightCellWidthCellHeight 以及TotalWidth/TotalHeight 内的Position。其中 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;

    【讨论】:

      猜你喜欢
      • 2022-10-09
      • 2020-05-08
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多