Невозможно сохранить значение в поле ввода, чтобы проверить, правильно ли оно. единство - PullRequest
0 голосов
/ 01 сентября 2018

Привет, ребята (извините, что задаю вопрос так скоро).

Я пытался создать поле ввода, и всякий раз, когда игрок вводит что-то правильное, оно регистрируется как правильное. Моя тактика для этого состояла в том, чтобы создать строку (для текста, отображающего вопрос или диалог), а затем создать еще одну строку с ответами. Если конкретный ответ «точка» (в диапазоне, например, «1», «2», «3» и пользователь написал «3», когда это была 3-я точка), был правильным, как в примере, то он стал бы зеленым и двигаться дальше. Как и при использовании кнопок, я планировал создать переменную int и сбросить ее, когда что-то произошло. Попытавшись сделать это, я обнаружил много проблем. Если бы я попытался сделать это с другой строкой, прикрепленной к другому объекту, и проверил, равны ли они двум, то во второй раз, когда я написал ответ (не нажимая клавишу ввода), он регистрировался вместо этого. Я предполагаю, что это потому, что консоль не регистрирует его после щелчка. Поэтому я попытался поэкспериментировать с другим текстовым полем. У текстового поля также будет ответ, и если текст, который пользователь написал в поле ввода, совпадет, он продолжится. Проблема в том, что вы, очевидно, не можете ссылаться на поле ввода и текст в одном выражении. Так вот, через 4 часа я прихожу к вам, ребята. Есть ли способ, которым я могу сохранить значение поля ввода и проверить его с текстом чего-то еще, чтобы увидеть, было ли это правильно?

мой код: hello и by были двумя текстовыми интерфейсами, которые я пытался использовать, чтобы помочь с процессом проверки, хотя я предполагаю, что если вы сделали это правильно, есть лучший способ сделать это. Это контроллер, который подключен к пустому игровому объекту с полем ввода, связанным с полем ввода (внутри объекта).

             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 голосов
/ 02 сентября 2018

Прежде всего, GetComponent<>() - дорогостоящая операция, и вам не нужно вызывать ее в функции Update (). Объявите это в функции Start () (так же, как 'hello' или 'by')

Во-вторых, я предлагаю вам перетащить все открытые переменные в редактор, чтобы вам даже не понадобилось использовать GetComponent в функции запуска (это сделает ваши сценарии более чистыми).

В-третьих, вам не нужно явно получать компонент Text, чтобы получить значение поля ввода. inputF.text делает работу. См. Пример в конце для получения дополнительной информации.

Наконец, ваш вопрос:

Q: Есть ли способ, которым я могу сохранить значение поля ввода и проверить его с текстом чего-то еще, чтобы увидеть, было ли оно правильным?

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. Если вы хотите мгновенно проверить правильность ответа, вам не нужно вызывать CheckAnswer () в обновлении, потому что он вызывается каждый кадр без причины. Вы должны вызывать его всякий раз, когда значение поля ввода изменилось. Google больше о слушателях событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...