Получить столбец и строку подсчета из GridLayoutGroup программно - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть панель с GridLayoutGroup.Ограничение установлено в «Гибкое», поэтому оно не фиксируется в строке и столбце, и я не хочу, чтобы оно было.

Теперь я хочу получить количество столбцов для этого GridLayout в коде позади, а затемизмените размер ячеек, чтобы они поместились на экране.

enter image description here

 GridLayoutGroup layoutgroup;

У меня есть переменная GridLayoutGroup в моем коде, но нет функции, чтобы получитьстолбцы этого.

как мне это сделать?

1 Ответ

0 голосов
/ 17 сентября 2018

Вы должны считать их вручную в цикле.Вы можете получить количество столбцов и строк из компонента GridLayoutGroup, выполнив следующие действия:

1 . Получите позицию первого потомка объекта под объектом GridLayoutGroup.Позиция должна быть от RectTransform.anchoredPosition, которая возвращает Vector2.

2 . Цикл от второго дочернего к остальным дочерним объектам GridLayoutGroup.

3 . В каждом цикле от # 2 , сравните компонент x из первого дочернего элемента с компонентом x из текущего цикла.

Создайте логическую переменную вне цикла, которая определяет, когда прекратить подсчетстрока.Значение ошибки должно составлять false.

Если значения x совпадают, это столбец , поэтому увеличьте значение столбца на 1 и установите логическую переменную на true.

Если значения x не одинаковы, а логическая переменная равна false, это строка , поэтому увеличьте строку на 1.

По сути, вы останавливаете подсчет или увеличение строки, когда столбец найден в цикле.Для этого используется логическая переменная.

void GetColumnAndRow(GridLayoutGroup glg, out int column, out int row)
{
    column = 0;
    row = 0;

    if (glg.transform.childCount == 0)
        return;

    //Column and row are now 1
    column = 1;
    row = 1;

    //Get the first child GameObject of the GridLayoutGroup
    RectTransform firstChildObj = glg.transform.
        GetChild(0).GetComponent<RectTransform>();

    Vector2 firstChildPos = firstChildObj.anchoredPosition;
    bool stopCountingRow = false;

    //Loop through the rest of the child object
    for (int i = 1; i < glg.transform.childCount; i++)
    {
        //Get the next child
        RectTransform currentChildObj = glg.transform.
       GetChild(i).GetComponent<RectTransform>();

        Vector2 currentChildPos = currentChildObj.anchoredPosition;

        //if first child.x == otherchild.x, it is a column, ele it's a row
        if (firstChildPos.x == currentChildPos.x)
        {
            column++;
            //Stop couting row once we find column
            stopCountingRow = true;
        }
        else
        {
            if (!stopCountingRow)
                row++;
        }
    }
}

Использование:

public GridLayoutGroup gridLG;

void Update()
{
    int column = 0;
    int row = 0;
    GetColumnAndRow(gridLG, out column, out row);
    Debug.Log("Column: " + column + "   Row: " + row);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...