多个子代之间的Unity 3d访问特定文本元素

时间:2019-04-03 10:36:19

标签: c# unity3d

我正在为游戏编写UI,我陷入了需要访问特定文本并为每个文本分配值的问题。 案例:不同的球队有不同的球员人数,每个球员都有不同的数据(例如力量等)。我有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 :(得分:0)

“我有'n'个游戏对象(n视情况而定)。因此,不可能直接公开手动引用游戏对象”

这就是为什么存在预制件的原因。

创建一个名为PlayerStats的脚本,并为其提供所需的字段(“强度”,“速度”,“耐力”等)。

创建一个游戏对象。将其称为PlayerObj或类似名称。向其中添加PlayerStats组件。添加脚本所需的任何绑定(如果需要),但所有绑定都应绑定到PlayerObj(或PlayerObj本身的其他组件)下的对象

例如,在PlayerObj下创建一个StrengthText作为子对象,并将其绑定到PlayerStats.Strength

制作出PlayerObj的预制件。

创建放置在卡片中的对象时,这些对象应为instances created from the prefab

现在每个这些实例都有各自的实例的PlayerStats和 relative 绑定。

因此您可以这样做:

     while(i<25 && Cards[i]!=null)
     {
         Cards[i].gameObject.GetComponent<PlayerStats>().Strength.text = Team1Roster[i];
         i++;
     }