我目前正在从对象池中制作一个具有三个按钮的问答游戏,我希望它们根据是否正确回答而变成绿色或红色。效果很好。
当我添加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);
}
答案 0 :(得分:0)
按您所说的更改颜色(您可以在Button
的检查器中看到)
问题是Image
组件的颜色不会自动更新,因为Button
没有收到任何指针事件,例如PointerDown
,PointerExit
等=>新颜色不会应用于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