1. Настройка проекта и основы Enhanced Input для мобильных устройств
Настройка проекта и основы Enhanced Input для мобильных устройств
Добро пожаловать на курс «Мобильное управление в Unreal Engine 5 на Blueprints». Это первая статья, в которой мы заложим фундамент для создания отзывчивого и удобного управления для мобильных игр. Мы не просто добавим кнопки на экран, а разберем современный стандарт ввода в Unreal Engine — Enhanced Input, и научимся правильно настраивать проект под Android и iOS.
Почему именно Enhanced Input?
В старых версиях Unreal Engine использовалась система ввода, жестко привязанная к настройкам проекта (Project Settings -> Input). Она была простой, но негибкой. С выходом Unreal Engine 5 стандартом стала система Enhanced Input.
Ее главные преимущества для мобильной разработки:
* Модульность: Вы можете менять схемы управления на лету (например, когда персонаж садится в машину, управление меняется с пешего на транспортное). * Фильтрация: Система сама обрабатывает «мертвые зоны» (deadzones) джойстиков и инверсию осей. * Универсальность: Один и тот же код может работать и от виртуального джойстика на экране телефона, и от физического геймпада, подключенного по Bluetooth.
!Архитектура Enhanced Input: связь физического ввода с игровыми действиями через контексты.
Шаг 1: Правильная настройка проекта
Прежде чем писать код, нужно убедиться, что проект оптимизирован для мобильных устройств. Ошибки на этом этапе могут привести к тому, что управление будет «лагать» из-за низкой производительности.
Создание проекта
При создании нового проекта в Unreal Engine 5 выберите шаблон Third Person (Третье лицо) или Top Down (Вид сверху), так как они уже содержат базовые настройки движения. В панели настроек справа выберите:
Если вы уже создали проект, эти настройки можно изменить через Project Settings -> Target Hardware.
Настройка сенсорного ввода
По умолчанию Unreal Engine может не отображать курсор или касания так, как мы ожидаем. Убедитесь в следующих настройках:
Project Settings.Engine -> Input.DefaultVirtualJoysticks).Шаг 2: Основные компоненты Enhanced Input
Система состоит из четырех основных элементов. Давайте разберем их на примере создания управления для движения персонажа.
1. Input Action (IA)
Это «смысл» действия. Это то, что делает персонаж, без привязки к тому, как он это делает. Например: «Прыжок», «Движение», «Атака».
Для движения нам нужно действие, которое возвращает вектор (направление и силу).
* Создайте папку Input в Content Browser.
* Нажмите ПКМ -> Input -> Input Action.
* Назовите его IA_Move.
* Внутри ассета в поле Value Type выберите Axis2D (Vector2D). Это важно, так как джойстик выдает координаты X и Y.
2. Input Mapping Context (IMC)
Это «карта» или «словарь», который связывает физические кнопки с нашими Input Actions. Именно здесь мы скажем движку: «Виртуальный левый джойстик должен вызывать IA_Move».
* Нажмите ПКМ -> Input -> Input Mapping Context.
* Назовите его IMC_Default.
* Откройте его и нажмите «+» в разделе Mappings.
* Выберите созданный ранее IA_Move.
* В выпадающем списке клавиш (Key) найдите Gamepad Left Thumbstick 2D-Axis.
> Важно: В Unreal Engine стандартный виртуальный джойстик для мобильных устройств эмулирует поведение физического геймпада. Поэтому мы выбираем Gamepad Left Thumbstick, а не Touch 1 или Touch 2.
3. Modifiers (Модификаторы)
Модификаторы изменяют входящие данные до того, как они попадут в блюпринт. Это полезно для создания «мертвых зон».
В IMC_Default разверните настройки для IA_Move и добавьте модификатор Dead Zone. Это предотвратит случайное движение персонажа, если палец игрока лишь слегка дрогнет на экране.
Математически это работает как отсечение значений вектора, длина которого меньше заданного порога:
Где — итоговое значение вектора ввода, — исходное значение от сенсора, — длина (модуль) вектора, а — пороговое значение мертвой зоны.
4. Triggers (Триггеры)
Триггеры определяют, в какой момент действие считается выполненным (например, «нажато», «удерживается», «отпущено»). Для движения джойстиком триггеры обычно не нужны, так как нам важен непрерывный поток данных.
Шаг 3: Активация управления в Blueprints
Создание ассетов — это только половина дела. Теперь нужно сказать персонажу использовать этот контекст (IMC_Default).
Откройте блюпринт вашего персонажа (например, BP_ThirdPersonCharacter) и найдите событие BeginPlay.
Логика подключения выглядит так:
Get Controller).Player Controller (Cast To PlayerController).Пример логики на псевдокоде:
Если вы не выполните этот шаг, ваши Input Actions никогда не сработают, так как движок не будет знать, какую схему управления использовать.
Шаг 4: Обработка движения
Теперь, когда контекст активирован, мы можем использовать событие IA_Move в Event Graph персонажа.
IA_Move (в разделе Enhanced Action Events).Break Vector 2D, чтобы получить X и Y.Для движения персонажа обычно используются функции Add Movement Input:
* Значение X от джойстика подаем в Add Movement Input (World Direction: Forward Vector камеры или актора).
* Значение Y от джойстика подаем в Add Movement Input (World Direction: Right Vector камеры или актора).
!Пример реализации логики движения в Blueprints с использованием Enhanced Input.
Особенности мобильных джойстиков
Виртуальные джойстики в Unreal Engine — это отдельная сущность, называемая Touch Interface Setup. Это ассет, который определяет, где на экране находятся круги джойстиков и какие кнопки геймпада они эмулируют.
По умолчанию UE5 использует ассет, где: * Левый виртуальный стик -> Gamepad Left Thumbstick * Правый виртуальный стик -> Gamepad Right Thumbstick
Именно поэтому в настройках IMC мы выбирали Gamepad Left Thumbstick. Если вы захотите изменить внешний вид джойстиков (поменять картинки кружков), вам нужно будет создать свой ассет Touch Interface Setup и назначить его в Project Settings.
Заключение
Мы настроили базу: перевели проект на мобильные рельсы, разобрались с архитектурой Enhanced Input и активировали её в блюпринте. В следующей статье мы углубимся в создание кастомных виртуальных кнопок и взаимодействие с UI, чтобы сделать управление по-настоящему удобным.
Теперь проверьте свои знания с помощью небольшого теста ниже.