Unity 3d Доступ к определенному текстовому элементу среди нескольких детей - PullRequest
0 голосов
/ 03 апреля 2019

Я пишу пользовательский интерфейс для игры, и я застрял в точке, где мне нужно получить доступ к определенному тексту и назначить значение для каждого из них. Случай: разные команды имеют разное количество игроков, и у каждого игрока разные характеристики (например, сила и т. Д.). У меня есть «n» игровых объектов (n варьируется в зависимости от состояния). Следовательно, прямое публичное обращение к игровым объектам вручную невозможно. Панель имеет 3 дочерние панели. каждая дочерняя панель имеет как минимум 3 текстовых элемента. Каждый элемент должен иметь различное значение.

У меня есть массив игровых объектов. Каждый игровой объект в массиве имеет разные текстовые элементы. Так что я пытаюсь это:

 cards[1].playerName.text="A" , (or cards[1].playerName.text=anotherArray[1] )
 cards[1].Strength.text="90";
 cards[2].playerName.text="B" , 
 cards[2].Strength.text="40"

и я хочу получить их:

 if(MyTeam=="Team1")
        {
             int i = 0;
             while(i<25 && Cards[i]!=null)
             {
                 Cards[i].gameObject.GetComponentInChildren().text = Team1Roster[i].ToString();
                 Debug.Log(Cards[i].GetComponentInChildren());
                 i++;
             }
        }

В приведенном выше методе выбирается самый верхний элемент Text. Как выбрать разные текстовые элементы для каждого объекта.

Я тоже пробовал так:

while(i<25 && Cards[i]!=null)
        {
            Cards[i].gameObject.GetComponentInChildren<Text>().text = Team1Roster[i].ToString();
            var li=Cards[i].GetComponentsInChildren<Text>();
            foreach (Text text in li)
            {
                li.text = "";
            }
            i++;

        }

1 Ответ

0 голосов
/ 03 апреля 2019

«У меня есть« n »игровых объектов (n варьируется в зависимости от условий). Следовательно, прямое публичное обращение к игровым объектам вручную невозможно»

Именно поэтому существуют префабы.

Создайте сценарий под названием PlayerStats и предоставьте ему необходимые поля (Stength, Speed, Endurance и т. Д.).

Создайте игровой объект.Назовите это PlayerObj или что-то подобное.Добавьте к нему компонент PlayerStats.Добавьте все привязки, которые вам нужны (если вам нужно) для скрипта, но все привязки должны быть к объектам в PlayerObj (или другим компонентам самого PlayerObj)

Например, создайте StrengthText как дочерний объект в PlayerObj и привязать его к PlayerStats.Strength

Сделать заранее подготовленный PlayerObj.

При создании объектов, которые вы кладете в карты, это должны быть экземпляры, созданные изprefab

Теперь каждый из этих экземпляров имеет PlayerStats и относительные привязки к соответствующим экземплярам.

Так что вы можете сделать это:

     while(i<25 && Cards[i]!=null)
     {
         Cards[i].gameObject.GetComponent<PlayerStats>().Strength.text = Team1Roster[i];
         i++;
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...