使用CoRoutine Unity 3D按钮

时间:2019-03-20 17:07:28

标签: unity3d coroutine

我目前正在从对象池中制作一个具有三个按钮的问答游戏,我希望它们根据是否正确回答而变成绿色或红色。效果很好。

当我添加coRoutine来将按钮改回清除以便可以回答下一个问题时,单击后按钮几乎不会改变颜色,并且基本上什么也没有发生。非常感谢任何帮助!谢谢。

public void HandelClick()
{
    var colors = GetComponent<Button> ().colors;

    if( ! answerData.isCorrect)
    {   
        colors.normalColor = Color.red;
        GetComponent<Button>().colors = colors;
    }
    else
    {
        colors.normalColor = Color.green;
        GetComponent<Button> ().colors = colors;

        playerMovement.dodge();
    }

    StartCoroutine("Revert");
    //gameController.AnswerButtonClicked(answerData.isCorrect);
}

IEnumerator Revert() 
{
    Debug.Log(" we are reverting " + Time.time);
    yield return new WaitForSeconds(1.8f);
    Debug.Log(" we are reverting again " + Time.time);

    var colors = GetComponent<Button> ().colors;
    colors.normalColor = Color.clear;
    GetComponent<Button> ().colors = colors;
    gameController.AnswerButtonClicked(answerData.isCorrect);
}

1 个答案:

答案 0 :(得分:0)

按您所说的更改颜色(您可以在Button的检查器中看到)

问题是Image组件的颜色不会自动更新,因为Button没有收到任何指针事件,例如PointerDownPointerExit等=>新颜色不会应用于Image(仅在您执行新的指针事件(例如enter,exit,up或down)的情况下。)


您可以这样做

GetComponent<Image>().color = colors.normalColor;

在您进行更改的其他地方


注意:通常,GetComponent中只能使用Awake一次

private Button _button;
private Image _image;

private void Awake()
{
    _button = GetComponent<Button>();
    _image = GetComponent<Image>();
}

,然后重用引用_image_button