在Unity脚本中创建列表预制按钮

问题描述 投票:0回答:1

我目前正在做一个学校项目,遇到了以下问题。

我正在尝试创建一个由预制件制成的游戏板(预制件是一个按钮)。为此,我有以下代码:

public GameObject tilePrefab;
public Transform newParent;
public int xAxis = 0;
public int yAxis = 0;
private int boardWidth = 9;
public int boardHeight = 5;


private void GenerateBoard()
{
    int buttonNumber = 0;
    for (int i = 0; i < boardWidth; i++)
    {
        for (int j = 0; j < boardHeight; j++)
        {
            GameObject button = Instantiate(tilePrefab, new Vector3(xAxis, yAxis, 0), Quaternion.identity);
            button.transform.SetParent(newParent);

            boardButtons[buttonNumber] = button; //.GetComponentInChildren<Button>()
            yAxis += 300;
        }
        yAxis = 0;
        xAxis += 300;
    }
}

tilePrefab是Button预制,newParent是画布。这在大多数情况下都有效,但是当我尝试将创建的按钮添加到列表或button []数组时,会发生冲突。因为即使我的tilePrefab是ui按钮对象,生成这样的内容也意味着“按钮”是GameObject。

如何解决此问题,以便可以创建列表或按钮[]数组并将新创建的按钮成功存储在该列表/数组中?我尝试了“ public BoardPiece tilePrefab”或“ public Button tilePrefab”,但是实例化不起作用。 (BoardPiece是预制件的名称)

感谢您能提供的任何帮助。

unity3d
1个回答
0
投票

因为即使我的tilePrefab是一个ui按钮,也是如此

tilePrefab是一个附加了Button组件的GameObject,它们似乎是引起混淆的两种不同事物。我建议将GameObject Button重命名为GOButton,以使其清楚是GameOject而不是Button

如果要存储Button列表,则必须确保要添加Button,为此,建议您创建Button列表:

List<Button> buttonList = new List<Button>();

然后,每次实例化GOButton时,都将Button组件添加到列表中:

buttonList.Add(GOButton.GetComponent<Button>());

这样,您将获得一个按钮列表,可以循环播放并处理您喜欢的按钮:

foreach (Button button in buttonList)
{
   //change button state here
}
© www.soinside.com 2019 - 2024. All rights reserved.