我目前正在做一个学校项目,遇到了以下问题。
我正在尝试创建一个由预制件制成的游戏板(预制件是一个按钮)。为此,我有以下代码:
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是预制件的名称)
感谢您能提供的任何帮助。
因为即使我的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
}