Unity:问答游戏多选按钮颜色 [英] Unity: Quiz game multiple choice button colors

查看:38
本文介绍了Unity:问答游戏多选按钮颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一个选择题问答游戏,如果点击了错误的答案,我会尝试用绿色突出显示正确答案.例如,如果我有 A 、 B 、 C 和 D 并且A"是正确答案.我想如果我选择B"将 B 变成红色并显示绿色的正确答案,在这种情况下是A".现在我有,如果我点击正确的答案,它会显示绿色,正如我想要的那样.如果我按错了答案,它会显示为红色.我缺少的是当我点击错误答案时,我还想突出显示正确答案.

I'm doing a multiple choice quiz game, and im tryinng to highlight the correct answer in green if the wrong answer is clicked. for example if i have A , B , C and D and "A" is the correct answer. i want if i choose "B" to turn B to red color and display the correct answer to green which is in this case "A". Right now i have if i click the right answer it displays green, as i want it. and if i press wrong answer it displays red. what im missing is when i click wrong answer i want to also highlight the correct answer.

这是我的功能:

在游戏控制器中:

public bool theAnswerIsCorrect;

public bool IsCorrected()
{
    return theAnswerIsCorrect;
}

public void AnswerButtonClick(bool isCorrect)
{
    if (isCorrect)
    {
        Debug.Log("I'm Correct");
        theAnswerIsCorrect = true;
        playerScore += currentRoundData.pointAddedForCorrectAnswer;
        scoreDisplayText.text = "Score: " + playerScore.ToString();


    }

    else
        theAnswerIsCorrect = false;



    // Do we still have questions?
    if (questionPool.Length > questionIndex + 1)
    {
        //questionIndex++;

        UpdateQuestionIndex();
        StartCoroutine(DelayTime(3));
      //  ShowQuestion();
    }

    else
    {
        EndRound();
    }
}

这是一个只保存我的数据的类

And this is an a class that just holdes my data

public class answerData {

public string answerTxt;
public bool isCorrect;


}

这是在ButtonClick函数中使用的(问题中的代码)->这一行

This is being used in the ButtonClick function (the code in the begging of the question) -> this line

        gameController.AnswerButtonClick (AnswerData.isCorrect);

在检查器中,我通过布尔值指定正确答案是什么

And in the inspector i specify by the bool what is the correct answer

*** 此处有新脚本选择正确的按钮"

*** NEW SCRIPT HERE "Picking up the Correct button"

// store reference to btn text
public Text answerText;

private answerData AnswerData;
private GameController gameController;

public static AnswerButton _instace;

private void Awake()
{
    _instace = this;
}

// Use this for initialization
void Start () 
{
    gameController = FindObjectOfType<GameController> ();


}

public void Setup(answerData data)
{
    AnswerData = data;
    answerText.text = AnswerData.answerTxt;
}

IEnumerator ReturnButtonColor()
{
    yield return new WaitForSeconds(2.9f);
    GetComponent<Button>().image.color = Color.white;
    Debug.Log("HiB");


}


public void HandleClick()
{
    gameController.AnswerButtonClick (AnswerData.isCorrect);

    if (gameController.IsCorrected())
    {
       GetComponent<Button>().image.color = Color.green;
        Debug.Log("im true");
        StartCoroutine(ReturnButtonColor());


    }

    else
    {
        GetComponent<Button>().image.color = Color.red;
      //  gameController.IsCorrected().image.color = Color.green;
        StartCoroutine(ReturnButtonColor());

    }


}

谢谢

推荐答案

我假设所有选项按钮都附加了相同的脚本.

I am assuming that all option button have same script attached.

创建一个委托并将其注册到附加到选项按钮的脚本中.

Create one delegate and register this in your script which is attached to your option button.

像这样

创建委托和事件

#region DELEGATES
public delegate void OnQuestionOptionClicked ();
public static event OnQuestionOptionClicked onQuestionOptionClicked;
#endregion

#region DELEGATE_CALLS
private void RaiseOnQuestionOptionClicked ()
{
    if (onQuestionOptionClicked != null)
        onQuestionOptionClicked ();
}
#endregion

注册

void OnEnable ()
{
    onQuestionOptionClicked += OnQuestionOptionClicked;
}

void OnDisable ()
{
    onQuestionOptionClicked -= OnQuestionOptionClicked;
}

#region DELEGATE_EVENT_LISTENER
void OnQuestionOptionClicked ()
{
    GetComponent<Button>().interactable = false;
    if (AnswerData.isCorrect){
        GetComponent<Button>().image.color = Color.green;
        Debug.Log("im true");
    }
}
#endregion

您的设置方法

public void Setup(answerData data)
{
    AnswerData = data;
    answerText.text = AnswerData.answerTxt;
    GetComponent<Button>().interactable = true;
    GetComponent<Button>().image.color = Color.white;

}

按钮点击事件

#region BUTTON_CLICK_LISTENER
public void ButtonClick()
{
    gameController.AnswerButtonClick (AnswerData.isCorrect);

    if (!gameController.IsCorrected())
    {
        GetComponent<Button>().image.color = Color.red;
        Debug.Log("im true");
        // StartCoroutine(ReturnButtonColor());
    }

    RaiseOnQuestionOptionClicked ();
} 
#endregion

希望此解决方案对您有所帮助.;)

Hope this solution helps you.;)

这篇关于Unity:问答游戏多选按钮颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆