Как ввести данные с клавиатуры в Unity?
В небольшом приложении на Unity, на самом первом экране нужно ввести число, с которым позже будут проводиться манипуляции (делаем с сыном демонстрацию гипотезы Коллатца). Однако, найденные в интернете решения не сработали. Наши попытки представлены в примере кода, функция EnterNumber(), одно закомментировано.
Собственно, я просто помогаю разобраться сыну, у самого совсем нету опыта в этой среде. Позже данную функцию мы привязываем к кнопке.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
// UnityEngine.TouchScreenKeyboard keyboard;
// public static string keyboardText = "";
public string gt;
public void LoadNextScene()
{
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
public void LoadStartScene()
{
SceneManager.LoadScene(0);
}
public void EnterNumber()
{
foreach (char c in Input.inputString)
{
if (c == '\b') // has backspace/delete been pressed?
{
if (gt.Length != 0)
{
gt = gt.Substring(0, gt.Length - 1);
}
}
else if ((c == '\n') || (c == '\r')) // enter/return
{
print("User entered their name: " + gt);
}
else
{
gt += c;
}
}
Debug.Log(gt);
}
// public void EnterNumber()
// {
// keyboard = TouchScreenKeyboard.Open("text to edit");
// Debug.Log(keyboard.text);
// }
}
Спасибо. Вроде бы совсем простой вопрос, но рабочее решение найти не удалось.
Ответы (1 шт):
Например так:
- Добавляем на сцену
InputField
- Меняем
ContentTypeуInputFieldнаIntegerNumber - Добавляем элементы
Button,Panel, элементTextпод панелью (можно сразу переименовать вresultText, что бы не путаться)
- Переключаемся на вкладку
SceneРазмещаем элементы некоторым разумным образом (двойной щелчок по объекту на вкладкеHieararchyфокусирует вас на элементе, слева в верху (по умолчанию) есть тулл бар инструментов, используйте его для настройки размеров и перемещения элементов)
- Дальше пишем код, в котором будем манипулировать созданными элементами:
using System;
using UnityEngine;
using UnityEngine.UI;
public class Manipulator : MonoBehaviour
{
[SerializeField] private InputField _inputField;
[SerializeField] private Button _button;
[SerializeField] private Text _resultText;
private void Awake()
{
Debug.Assert(_inputField != null, $"Assign {nameof(_inputField)} field in the inspector");
Debug.Assert(_button != null, $"Assign {nameof(_button)} field in the inspector");
Debug.Assert(_resultText != null, $"Assign {nameof(_resultText)} field in the inspector");
Debug.Assert(_inputField.contentType == InputField.ContentType.IntegerNumber, "InputType should be IntegerNumber");
_button.onClick.AddListener(OnClick);
}
private void OnClick()
{
int result = ActionWithNumber(Convert.ToInt32(_inputField.text));
_resultText.text = result.ToString();
}
private int ActionWithNumber(int input)
{
//Здесь ваши действия с числом
return input;
}
private void OnDestroy()
{
_button.onClick.RemoveAllListeners();
}
}
Этот скрипт по нажатию на кнопку берет ввод из поля ввода, что-то с ним делаем и закидывает результат в текстовый блок. Помещаем скрипт на любой объект на сцене (лучше создать отдельный), заполняем поля в инспекторе (справа кнопочка у поля), запускаем.


