向Button Array添加一个onClick侦听器会导致NullReferenceException

时间:2017-11-13 13:47:51

标签: c# unity3d

大家好我正在尝试编写一个包含多个级别的游戏场景。在该场景中,用户将尝试记住屏幕上的文字,然后尝试通过单击按钮选择正确的文字。 我创建了多个按钮作为GameObject(出于特定原因)

所以这是怎么回事

    public GameObject[] buttons = new GameObject[7];

这些是我的按钮。我在画布上创建它们作为按钮,但在脚本中我将它们视为游戏对象。

 void wordsToButton()
{        
    for(int i = 0; i < wordsTxt.Length; i++)
    {          
        buttons[i].GetComponentInChildren<Text>().text = wordsTxt[i].GetComponent<Text>().text;
        buttons[i].transform.position = new Vector2(Random.Range(30, Screen.width - 20), Random.Range(30, Screen.height - 50));
    }
    for(int i=0; i <differentWords.Length; i++)
    {
        buttons[i+5].GetComponentInChildren<Text>().text = differentWords[i].GetComponent<Text>().text;
        buttons[i+5].transform.position = new Vector2(Random.Range(30, Screen.width - 20), Random.Range(30, Screen.height - 50));
    }
}

在这里,我正在尝试编辑按钮的文本并给它一个随机的位置。另外我也说了一些错误的单词。它工作正常。

 public void buttonListeners()
{
    for(int i=0; i < buttons.Length-1; i++)
    {
        buttons[i].GetComponent<Button>().onClick.AddListener(() =>
        {
            int n = i;
            if(buttons[n].GetComponent<Text>().text == differentWords[0].GetComponent<Text>().text || buttons[n].GetComponent<Text>().text == differentWords[1].GetComponent<Text>().text)
            {
                correctAnswers--;
            }
            else
            {
                correctAnswers++;
            }
        });
    }
}

在这里,我给了听众按钮。当用户点击按钮时,它会检查答案是否正确。

 public void level2()
{
    if (levels[2].activeSelf == true)
    {
        differentWords[0].SetActive(false);
        differentWords[1].SetActive(false);
        levels[0].SetActive(false);
        levels[1].SetActive(false);
        levels[3].SetActive(false);
        timer1 = 10;
        InvokeRepeating("countDown1", 0.01f , 1);           
    }
    wordsToButton();
    buttonListeners();
}

这是我谈到的级别。所以,当我点击屏幕上的按钮时,它给了我这个错误:

  

NullReferenceException:未将对象引用设置为对象的实例   Word + c__AnonStorey0。&lt;&gt; m__0()(在资产/类别/ Word.cs:184)

第184行是:

 if(buttons[n].GetComponent<Text>().text == differentWords[0].GetComponent<Text>().text || buttons[n].GetComponent<Text>().text == differentWords[1].GetComponent<Text>().text)

我该怎么办?我知道我正在尝试达到空值。但实际上它不是空的,到目前为止我的代码工作得很好,我可以看到按钮的文本,所有这些都是正确的但是当我点击一个按钮时,它给了我这个错误。

编辑:我理解为什么它会给我带来错误。想要帮助一些人。因为我试图获得一个Button的Text组件。这是null。我用

修复了我的代码
if(buttons[n].GetComponentInChildren<Text>().text == differentWords[0].GetComponent<Text>().text || buttons[n].GetComponentInChildren<Text>().text == differentWords[1].GetComponent<Text>().text)

0 个答案:

没有答案