无法在输入字段中存储值以检查其是否正确。团结

时间:2018-09-01 17:12:10

标签: c# unity3d

大家好(抱歉很快再问一个问题)。

我试图创建一个输入字段,只要玩家输入正确的内容,它就会注册为正确的。我的策略是创建一个字符串(用于显示问题或对话的文本),然后使用答案创建另一个字符串。如果特定答案“点”(例如,在“ 1”,“ 2”,“ 3”的范围内,并且用户在第三个点时写了“ 3”)是正确的,则该示例将变为绿色继续前进。 就像使用按钮一样,我计划制作一个int变量,然后在有东西进入时将其重置。尽管尝试了此操作,但我发现了许多问题。如果我尝试使用附加到另一个对象的另一个字符串来进行验证,并验证两者是否相等,那么我写的第二个答案(无需按回车键)将注册而不是之后注册。我认为这是因为单击后控制台未注册它。 所以我尝试了另一个文本框。该文本框也将具有答案,并且如果用户在输入字段中写入的文本匹配,它将继续。问题在于,显然您不能在同一条语句中引用输入字段和文本。所以这是4小时后,我来到你们这里的地方。有没有一种方法可以存储inputfield的值并与其他文本一起检查它是否正确?

我的代码:您好和by是我尝试使用的两个文本UI,以帮助进行验证过程,尽管我认为如果您正确执行此操作,则有更好的方法。这是控制器,它连接到一个空的游戏对象,而输入字段则连接到输入字段(对象内部)。

             using  System.Collections;
             using System.Collections.Generic;
             using UnityEngine;
             using UnityEngine.UI;
public class GameController : MonoBehaviour {

List<string> answers = new List<string>() { "1", "1", "1", "1", "1" };
public static string answer;
public Text hello;
public Text by;



// Allows you to attach the inputfield to the game controller, saving code
[SerializeField]
// declare variable input
private InputField input;

 void Start()
{
    hello = GameObject.Find("Hi").GetComponent<Text>();
    by = GameObject.Find("Bye").GetComponent<Text>();



}
// registers what the user writes 
public void getInput(string guess)
{
    // Declares the value in the console 
    input.text = "";



    Debug.Log("Hi");





}

这是带有对话框的正文的代码:

public class inputTextControl : MonoBehaviour {


List<string> questions = new List<string>() { "This is the first question", "second", "third", "fourth", "fifth" };

public  static string input = "n";
public static int randInput = -1;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {


    if (randInput == -1)
    {
        // The range of questions that can be asked (all the strings need to match this range for the questions in order to be functional without an exception error 
        randInput = Random.Range(0, 5);
    }

    if (randInput > -1)
    {
        GetComponent<Text>().text = questions[randInput];
    }


           }



            }

如果我不太清楚,我深表歉意。我很难解释整个情况,除了以下事实之外:输入字段不是像“正确答案中的类型”那样工作,而且您错了。你输了,那根本就没有用。

周末愉快!

}

1 个答案:

答案 0 :(得分:0)

首先,GetComponent<>()是一项昂贵的操作,您永远不需要在Update()函数中调用它。在Start()函数中声明它(与“ hello”或“ by”相同)

第二,我建议您将所有公共变量拖到​​编辑器中,这样您甚至不需要在启动函数中使用GetComponent(它将使您的脚本更加清晰)。

第三,您不需要显式获取Text组件即可获取输入字段的值。 inputF.text完成了工作。有关更多信息,请参见最后的示例。

最后,您的问题是:

问:有没有一种方法可以存储输入字段的值,并与其他内容的文本进行检查,以查看其是否正确?

A:是。这是一个简单的例子。

public InputField input;

void Start(){
    // Following line can be dismissed if we drag our input field in editor
    input = GameObject.Find("AnswerInputFieldName").GetComponent<InputField>();
}

void CheckAnswer(){
    string correct = "correctAnswer";
    string userAnswer = input.text;
    if(correct.compare(userAnswer) == 0)
        Debug.Log("That's correct!");
}

在需要时调用CheckAnswer()函数。

P.S。如果要立即检查答案是否正确,则无需在Update中调用CheckAnswer(),因为无缘无故地在每个帧中调用它。只要输入字段值已更改,就需要调用它。 Google进一步了解事件监听器。