Использование клавиатуры Android в игре

Например, в игре для мобильного устройства, по ходу игрового процесса, игрок находит некое особое место или предмет, который можно подписать или оставить заметку. Или может понадобится ввести какой-нибудь код/набор слов. В общем, во всех этих случаях нам понадобится клавиатура нашего девайса. Для решения подобной задачи, нам понадобится два небольших скрипта, один отвечает за вызов и контроль клавиатуры на экран, а второй скрипт, это просто триггер, который упрощает процесс использования данной функции в игре. Допустим, если на сцену добавить UI текстовый элемент и прицепить к нему триггер. То уже в самой игре, нам достаточно просто кликнуть по UI и появится клавиатура, которая впишет текст именно в этот элемент. Удобно и просто.

Основной класс управления:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Keyboard : MonoBehaviour {

	[Header("Настройки по умолчанию")]
	[SerializeField] private int _characterLimit = 10;
	[SerializeField] private TouchScreenKeyboardType _type;
	[SerializeField] private bool _autocorrection;
	[SerializeField] private bool _multiline;
	[SerializeField] private bool _secure;
	[SerializeField] private bool _alert = true;
	[SerializeField] private string _textPlaceholder = "Enter text...";

	private static TouchScreenKeyboard _keyboard;
	private static Keyboard _internal;
	private static int limit;
	private static Text current;
	private static string last;

	public static bool isActive
	{
		get{ return (_keyboard == null) ? false : _keyboard.active; }
	}

	public static void OpenDefault()
	{
		_internal.Open();
	}

	public static void Close()
	{
		_keyboard.active = false;
	}

	public static void OpenCustom(int characterLimit, TouchScreenKeyboardType type, bool autocorrection, bool multiline, bool secure, bool alert, string textPlaceholder)
	{
		limit = characterLimit;
		_keyboard = TouchScreenKeyboard.Open(last, type, autocorrection, multiline, secure, alert, textPlaceholder);
	}

	public static void TextField(Text value)
	{
		if(value.text == null || value.text.Trim().Length == 0) last = string.Empty; else last = value.text;
		current = value;
	}

	void Awake()
	{
		_internal = this;
	}

	void Open()
	{
		limit = _characterLimit;
		_keyboard = TouchScreenKeyboard.Open(last, _type, _autocorrection, _multiline, _secure, _alert, _textPlaceholder);
	}

	void LateUpdate()
	{
		if(_keyboard == null || current == null) return;

		if(_keyboard.done)
		{
			current.text = _keyboard.text;
			current = null;
		}

		if(_keyboard.text.Length > limit)
		{
			_keyboard.text = _keyboard.text.Substring(0, _keyboard.text.Length - 1);
		}
	}
}

Кстати, здесь можно установить лимит в символах, что крайне удобно в ряде случаев.

Теперь сам триггер:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.EventSystems;

public class KeyboardTrigger : MonoBehaviour, IPointerClickHandler {

	[Header("Куда выводить текст")]
	[SerializeField] private Text _Text;

	[Header("Вызов без настроек")]
	[SerializeField] private bool isDefault = true;

	[Header("Настройки триггера")]
	[SerializeField] private int characterLimit = 100;
	[SerializeField] private TouchScreenKeyboardType type;
	[SerializeField] private bool autocorrection;
	[SerializeField] private bool multiline;
	[SerializeField] private bool secure;
	[SerializeField] private bool alert = true;
	[SerializeField] private string textPlaceholder = "Введите текст...";

	void IPointerClickHandler.OnPointerClick(PointerEventData eventData)
	{
		Keyboard.TextField(_Text);
		if(isDefault) Keyboard.OpenDefault(); else Keyboard.OpenCustom(characterLimit, type, autocorrection, multiline, secure, alert, textPlaceholder);
	}
}

Триггер можно цеплять на UI Text, Image, Button...

Еще одна особенность, если мы добавили куда-то текст, а потом еще раз кликнули по этому объекту, данный текст будет автоматически добавлен в поле клавиатуры, это для удобства редактирования.

Скачать проект:

У вас нет доступа!
Тестировалось на: Unity 5.4.2
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика