Установить ширину текста компонента с помощью скрипта - PullRequest
1 голос
/ 08 мая 2019

Я создаю таблицу лидеров на изображении (https://imgur.com/a/I0aVSaR), проблема в том, что я не могу правильно выровнять числа в центральном ряду.

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

Моя проблема сейчас заключается в том, как установить ширину с помощью скрипта, я уже пробовал rectransform.deltaSize, SetSizeWithCurrentAnchors и другие подобные вещи без удачи.

Я также пытался установить предпочтительную ширину в инспекторе элемента макета, но игнорируется (https://imgur.com/a/O3hDeGN).

Вот как создаются элементы:

   for (int i = 0; i < leaderboardEntries.Count; i++) 
   {
        Transform newEntry = Instantiate(entryPrefab);
        newEntry.SetParent(leaderboardEntriesPanel);

        Text entryName = newEntry.GetChild(0).GetComponent<Text>();
        Text entryScore = newEntry.GetChild(1).GetComponent<Text>();
        Text entryRank = newEntry.GetChild(2).GetComponent<Text>();

        entryName.text = leaderboardEntries[i].getName();
        entryScore.text = leaderboardEntries[i].getScore().ToString();
        entryRank.text = (i+1).ToString();

        entryName.alignment = TextAnchor.UpperLeft;
        entryScore.alignment = TextAnchor.UpperRight;
        entryRank.alignment = TextAnchor.UpperRight;

    }

Центральная строка - это оценка, левая строка - имя, а правая строка - ранг.

Спасибо!

1 Ответ

0 голосов
/ 08 мая 2019

если вы хотите изменить ширину и высоту RectTransform, вы можете попробовать это:

rectTransform.sizeDelta = new Vector2( width, height); 

но для исправления их выравнивания нужно что-то другое, прежде всего, все выравнивания должны быть одинаковыми, например UpperLeft или MiddleLeft. затем установите точку привязки всех ваших записей на то же значение. тогда что-то вроде этого должно работать правильно:

// in this example I considered all anchor points are middle left and all 
// alignments are middle left too

float width = leaderboardEntriesPanel.GetComponent<RectTransform>().rect.width;
for (int i = 0; i < leaderboardEntries.Count; i++) 
   {
        Transform newEntry = Instantiate(entryPrefab);
        newEntry.SetParent(leaderboardEntriesPanel);

        Text entryName = newEntry.GetChild(0).GetComponent<Text>();
        Text entryScore = newEntry.GetChild(1).GetComponent<Text>();
        Text entryRank = newEntry.GetChild(2).GetComponent<Text>();

        entryName.text = leaderboardEntries[i].getName();
        entryScore.text = leaderboardEntries[i].getScore().ToString();
        entryRank.text = (i+1).ToString();

        entryName.GetComponent<RectTransform>().anchoredPosition = new Vector2(width / 15, entryName.GetComponent<RectTransform>().anchoredPosition.y);
        entryScore.GetComponent<RectTransform>().anchoredPosition = new Vector2(width / 2, entryScore.GetComponent<RectTransform>().anchoredPosition.y);
        entryRank.GetComponent<RectTransform>().anchoredPosition = new Vector2(width * 4 / 5, entryRank.GetComponent<RectTransform>().anchoredPosition.y);

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...