大家好(抱歉很快再问一个问题)。
我试图创建一个输入字段,只要玩家输入正确的内容,它就会注册为正确的。我的策略是创建一个字符串(用于显示问题或对话的文本),然后使用答案创建另一个字符串。如果特定答案“点”(例如,在“ 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];
}
}
}
如果我不太清楚,我深表歉意。我很难解释整个情况,除了以下事实之外:输入字段不是像“正确答案中的类型”那样工作,而且您错了。你输了,那根本就没有用。
周末愉快!
}
答案 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进一步了解事件监听器。