Skip to content

Latest commit

 

History

History
223 lines (155 loc) · 13.1 KB

README.ru.md

File metadata and controls

223 lines (155 loc) · 13.1 KB

Static Badge Static Badge

UMI (UnityMobileInput)

UMI

Unity плагин для Android и iOS, позволяет использовать функции нативных полей ввода

Быстрый старт · Документация · Отчёт об ошибке

💬 Описание

Этот пакет позволяет использовать нативные поля ввода на Android и iOS. Он работает в паре с компонентом TMP InputField и использует некоторые его настройки.

Проблема

Текущая реализация мобильного поля ввода в Unity не позволяет полноценно использовать все возможности, такие как выделение, копирование, вставка, ввод эмоджи и другие встроенные функции. И никто пока не имеет представления когда это будет реализовано и будет ли вообще.

Решение

Этот плагин создаёт нативные поля ввода поверх UI канваса со всеми функциями платформы. Т.к. это хак и поля ввода расположены поверх всего UI, вам необходимо самостоятельно контролировать их видимость и позицию. Для этого в плагине есть несколько полезных функций.

✨ Особенности

  • нативное поле ввода и клавиатура для iOS и Android
  • настройка типа кнопки: Стандартная, Далее, Готово, Поиск, Отправить
  • настройка обработки кнопки
  • настройка кнопкок Готово и Очистить (iOS)
  • изменение опций поля ввода во время выполнения
  • скрытие дополнительного поля ввода (Android)
  • отслеживание появления и скрытия клавиатуры (с высотой)
  • отслеживание ориентации экрана
  • установка языка клавиатуры для поля ввода
  • поддержка пользовательских шрифтов

🚀 Использование

Установка

Скачайте пакет со страницы релизов или добавьте строчку ниже в ваш файл Packages/manifest.json и пакет будет установлен по адресу Git репозитория:

"com.mopsicus.umi": "https://github.com/mopsicus/umi.git",

Быстрый старт

Посмотрите пример использования в демо. Этот пример покажет как инициализировать и использовать UMI в вашем приложении, как создать экран по типу мессенджера и как использовать свои шрифты.

Протестировано в Unity 2020.3.x, Android (API >= 24) и iOS.

Инициализация

Перед созданием первого нативного поля ввода, необходимо проинициализировать UMI. На сцене будет создан специальный объект с контроллером для связи с нативными плагинами.

Для этого, добавьте UMI в секцию uses и вызовете инициализацию, например, в методе Awake в стартовой точке вашего приложения.

using UnityEngine;
using UMI;

public class Bootstrap : MonoBehaviour {

    void Awake() {
        MobileInput.Init();
    }
    
}

Note

Убедитесь что вы сделали это до создания и появления всех полей ввода, иначе UMI выдаст ошибку.

Настройка

Для начала использования UMI в вашем проекте, добавьте скрипт MobileInputField на объект с полем ввода TMP Input field.

В инспекторе вы можете редактировать некоторые опции которые будут применены к нативному полю ввода:

  • цвет текста
  • цвет текста подсказки
  • цвет курсора/каретки
  • цвет выделения текста (Android)
  • текст подсказки
  • лимит символов
  • размер шрифта
  • положение текста
  • тип поля ввода
  • тип клавиатуры
  • многострочность

UMI также позволяет дополнительно настраивать:

  • цвет фона
  • тип кнопки
  • обработку кнопки
  • свой шрифт
  • язык клавиатуры при инициализации
  • управление скрытием клавиатуры
  • кнопки "Готово" и "Очистить"

Обработка клавиатуры и ориентации экрана

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

using UnityEngine;
using UMI;

public class Bootstrap : MonoBehaviour {

    void Awake() {
        MobileInput.Init();
        MobileInput.OnKeyboardAction += OnKeyboardAction;
        MobileInput.OnOrientationChange += OnOrientationChange;
    }

    void OnOrientationChange(HardwareOrientation orientation) {
        // вызывается когда меняется ориентация экрана
    }

    void OnKeyboardAction(bool isShow, int height) {
        // вызывается когда клавиатура появляется или скрывается, или когда изменяется её высота
    }
    
}

При использовании события OnKeyboardAction вы можете контролировать UI элементы, например, сдвигать вверх поле ввода как мессенджерах. Смотрите демо.

Runtime методы

  • SetTextColor – изменение цвета текста
  • SetPlaceholderColor – изменение цвета текста подсказки
  • SetBackgroundColor – изменение цвета фона
  • SetContentType – изменение типа поля ввода
  • SetReadonly – изменение состояния "только для чтения"
  • SetLanguage – изменение языка клавиатуры

Как использовать свои шрифты

  1. Скопируйте TTF шрифты в папку StreamingAssets
  2. Измените название шрифта в инспекторе вместо default
  3. Пользуйтесь

При первой инициализации UMI скопирует шрифты в специальную пользовательскую папку приложения. Если вы меняете шрифт(ы) при обновлении, то вам необходимо вызвать метод MobileInput.UpdateFonts() чтобы обновить шрифты в этой папке.

iOS

iOS часть плагина достаточна проста, содержит всего 3 файла: сам плагин и два файла для связи с Unity приложением. Если вы хотите узнать как это всё работает – смотрите файл MobileInput.mm в папке Plugins этого пакета и читайте документацию.

Android

Android часть – это скомпилированная AAR библиотека. Все исходные коды доступны в папке Android~. Вы можете изменить эту часть как вам необходимо и перекомпилировать.

Убедитесь что ваш AndroidManifest.xml содержит следующую настройку:

<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:windowSoftInputMode="adjustNothing">
    ...
    <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
    ...
</activity>

Опция adjustNothing добавлена для предотвращения смещения экрана вверх при появлении клавиатуры.

Unity

Unity часть содержит интерфейс для вызова нативных методов у полей ввода, а также скрипт для редактора, для настройки дополнительных параметров в инспекторе.

При инициализации, плагин создаёт неразрушаемый объект с контроллером для отправки и получения команд из нативной части. При использовании скрипта MobileInputField, плагин автоматически регистрирует его и создаёт нативное поле.

Данные между Unity приложением и нативными плагинами передаются в JSON формате. UMI использует библиотеку NiceJson с некоторыми модификациями.

🏗️ Развитие

Мы приглашаем вас внести свой вклад и помочь улучшить UMI. Пожалуйста, ознакомьтесь с документом. 🤗

Вы также можете внести свой вклад в проект UMI:

  • Помогая другим пользователям
  • Мониторя список существующих проблем
  • Рассказав о проекте в своих соцсетях
  • Используя его в своих проектах

Настройка окружения

Настройте своё окружение для локальной разработки для удобства и "синхронизации" с текущим проектом. Так как UMI разрабатывается с использованием редактора VS Code, то все настройки и рекомендации предложены для него.

  1. Используйте Monokai Pro или eppz! тему
  2. Используйте FiraCode шрифт
  3. Установите расширения:
    • C#
    • C# Dev Kit
    • Unity
  4. Включите Inlay Hints в настройках C# расширения
  5. Установить пакет Visual Studio Editor в редакторе Unity
  6. Поместите файл .editorconfig в корневую папку проекта
  7. Ура!

🤝 Поддержка

Вы можете поддержать проект любым из способов ниже:

  • Bitcoin (BTC): 1VccPXdHeiUofzEj4hPfvVbdnzoKkX8TJ
  • USDT (TRC20): TMHacMp461jHH2SHJQn8VkzCPNEMrFno7m
  • TON: UQDVp346KxR6XxFeYc3ksZ_jOuYjztg7b4lEs6ulEWYmJb0f
  • Карты Visa, Mastercard через Boosty
  • Карты МИР через CloudTips

✉️ Контактная информация

Перед тем как задать вопрос, лучшим решением будет посмотреть уже существующие проблемы, это может помочь. В любом случае, вы можете задать любой вопрос или отправить предложение по email или Telegram.

🔑 Лицензия

UMI выпущен под лицензией MIT. Используйте бесплатно и радуйтесь. 🎉