Использование кнопок CoRoutine Unity 3D - PullRequest
0 голосов
/ 20 марта 2019

В настоящее время я делаю игру-викторину, в которой есть три кнопки из пула объектов, и я хочу, чтобы они стали зелеными или красными в зависимости от того, верны они или нет. Это отлично работает.

Когда я добавляю 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 голосов
/ 20 марта 2019

Изменение цвета работает, как вы сказали (вы можете видеть это в Инспекторе Button)

Проблема в том, что цвет компонента Image не обновляется автоматически, поскольку Button не получает никакого события указателя, например PointerDown, PointerExit и т. Д. => Новый цвет не применяется к Image (только в тех случаях, когда вы создаете новое событие указателя, например, ввод, выход, вверх или вниз).


Вы можете решить это, выполнив

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

дополнительные везде, где вы меняете его.


Примечание. В общем случае GetComponent следует использовать только один раз в Awake

.
private Button _button;
private Image _image;

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

и затем повторно использовать ссылки _image и _button

...