» » » ChairInput. Пишем игру в Unity, управляемую с помощью виртуальной клавиатуры Android. Проблема с углом обзора камеры

 

ChairInput. Пишем игру в Unity, управляемую с помощью виртуальной клавиатуры Android. Проблема с углом обзора камеры

Автор: admin от 10-02-2017, 16:50, посмотрело: 664

Всем привет, я написал клавиатурный тренажер под Android в Unity3D, он не сильно заточен под особых детей, а предназначен для широкого пользователя (ну я так думаю). И в этом посте я хочу рассказать о проблеме перекрывания части экрана клавиатурой и способах ее решения.

ChairInput. Пишем игру в Unity, управляемую с помощью виртуальной клавиатуры Android. Проблема с углом обзора камеры

Немного об игре


Хотя это не имеет отношение к теме поста, расскажу немного об игре:

Принцип прост, Вы выбираете один из предложенных текстов или вводите свой и начинаете тренироваться печатать. При нажатии верной кнопки в букву летит мяч. Если вы ошибаетесь, отпускается зеленая завеса и не поднимается до тех пор, пока Вы не сотрете лишнее.

Меня попросили педагоги сделать эту игру, так как популярные тренажеры сильно заточены на скорость печати сильно заточены на скорость и правильную расстановку пальцев. Это не очень подходит для занятиями особыми людьми, так. как я могу печатать только двумя пальцами (остальные не разгибаются), а моя подруга вообще ногой. О скорости печати вообще молчу. Так что я не пытаюсь переплюнуть ребят с klava.org или клавагонки, а пишу свое.

ChairInput. Пишем игру в Unity, управляемую с помощью виртуальной клавиатуры Android. Проблема с углом обзора камеры

Работа с вводом


Работу с вводом текста я решил организовать через стандартный Unity UI InputField, событие о нажатии кнопки и последний символ получается так.

	InputField field;
	public void Start()
	{
		field = GetComponent<InputField> ();
		field.onValueChange.AddListener (delegate {ValueChangeCheck ();});
		// focus on field on loading scene
		field.Select ();
		field.ActivateInputField ();

	}

	// Invoked when the value of the text field changes.
	public void ValueChangeCheck()
	{
		string symbol = field.text.Length==0?null: field.text[field.text.Length-1]+"";
        }

Дальше происходит скучная магия по бросанию мячиков в буквы, публиковать ее не буду, ибо там куча говнокода она требует рефакторинг.

Проблема


На компьютере всё работало прекрасно, но когда я запустил игру на Android, увидел Бескрайное небо Аустерлица, что клавиатура наехала на основное игровое пространство и перекрыло всё.

ChairInput. Пишем игру в Unity, управляемую с помощью виртуальной клавиатуры Android. Проблема с углом обзора камеры

В гугле ничего хорошего не нашел (возможно, я просто гуглить не умею) и я стал сам ковырять свойства камеры.

Решение проблемы


В настройках я нашел свойство Viewport Rect и выставил в нем Y на 0.5, думал, что на этом мои проблемы закончились, но нет.

ChairInput. Пишем игру в Unity, управляемую с помощью виртуальной клавиатуры Android. Проблема с углом обзора камеры

В вертикальной ориентации экрана клавиатура перестала наезжать на экран, но в горизонтальной клавиатура всё еще наезжала на картинку, тогда я поигрался с цифрами и подобрал значение для горизонтальной, 0.3. И правильно, всё уехало в вертикале.

Подумав, я понял, что коэффициент высоты клавиатуры на высоту экрана. Решил написать скрипт, который меняет этот коэффициент, рассчитывая из текущей высоты клавиатуры. Нашел на stackoverflow скрип получения высоты и написал такой скрипт:

[code]using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class CameraController : MonoBehaviour {
Camera cam;
// Use this for initialization
void Start () {
cam = GetComponent ();
}

#if (UNITY_ANDROID)

Rect KeyBoardRect = new Rect(0, 0, 1,1);
void FixedUpdate () {
KeyBoardRect.y = ((float)GetKeyboardSize ()) / Screen.height;

cam.rect = KeyBoardRect;

}
public int GetKeyboardSize()
{
using (AndroidJavaClass UnityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
AndroidJavaObject View = UnityClass.GetStaticтут
-> Мой сайт: aacidov.ru

Источник: Хабрахабр

Категория: Веб-разработка, Android

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *