Как я могу сгенерировать количество кнопок пользовательского интерфейса, расположить их в верхнем левом углу холста и сделать равные промежутки между кнопками? - PullRequest
0 голосов
/ 07 июня 2019

parent - это холст. Я хочу расположить кнопки в левом верхнем углу. А под пробелами я подразумеваю расположить каждую кнопку под следующей с пробелом, например:

Кнопка 1

Кнопка 2

Кнопка 3

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GenerateUIButtons : MonoBehaviour
{
    public GameObject buttonPrefab;
    public GameObject parent;
    public int numberOfButtons;
    public float spaceBetweenButtons;

    // Start is called before the first frame update
    void Start()
    {
        float minX = parent.GetComponent<RectTransform>().position.x + parent.GetComponent<RectTransform>().rect.xMin;
        float maxY = parent.GetComponent<RectTransform>().position.y + parent.GetComponent<RectTransform>().rect.yMax;
        float z = parent.GetComponent<RectTransform>().position.z;

        Vector3 topLeft = new Vector3(minX, maxY, z);

        for (int i = 0; i < Rotate.names.Length; i++)
        {
            GameObject newButton = Instantiate(buttonPrefab);
            newButton.name = Rotate.names[i];
            newButton.transform.position = topLeft;
            newButton.transform.SetParent(parent.transform, false);
        }
    }

    // Update is called once per frame
    void Update()
    {

    }
}

Я пробовал эту часть для вычисления верхней левой позиции холста, также пытался использовать localPosition, но в обоих случаях localPosition и position создает кнопки вне области холста над холстом:

UI Buttons

1 Ответ

1 голос
/ 07 июня 2019

Два подхода, первый простой, используют Vertical / HorizontalLayoutGroup.В них содержатся переменные интервалов и отступов для установки ваших элементов.

Второй - добавить родительский контейнер и сделать вашу кнопку его дочерней.

Если у вас определенное количество элементов,код не нужен, просто установите значения привязки.

Если вы хотите, чтобы они располагались вертикально:

minX = 0 maxX = 1
minY = 2/3 maxY = 1

minX = 0 maxX = 1
minY = 1/3 maxY = 2/3

minX = 0 maxX = 1
minY = 0 maxY = 1/3

, то вы можете использовать Левый / Верхний / Правый / Нижний, чтобы установить поле и интервал,Так что если вы хотите занять всю ширину и иметь 5px пробел между элементами

Left = 0 Top = 0
Right = 0 Bottom = 2.5

Left = 0 Top = 2.5
Right = 0 Bottom = 2.5

Left = 0 Top = 2.5
Right = 0 Bottom = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...