Unreal Engine - Разработка ч.44 - Продвинутое управление (Enhanced Inputs) - Конвертируем проект ч.1
Окей. В этом посте мы разобрались как связывать ввод с клавиатуры и исполнение функции "по старому", и чуть раньше рассмотрели весь функционал EIS. Сегодня пора взяться за конвертирование проекта с попугаем в EIS. Заодно мы рассмотрим как этот процесс выглядит с точки зрения BP и, само собой С++.
Резюмирую проделанное раньше. Мы разобрались что такое Actor, Pawn, разобрались с капсюль компонентом и скелетал меш компонентом и по итогу имеем в проекте скелетал меш и анимацию к нему которая просто играется играется в цикле. Сегодня я хочу заставить нашего персонажа передвигаться вперед и назад используя EIS.
Резюмирую проделанное раньше. Мы разобрались что такое Actor, Pawn, разобрались с капсюль компонентом и скелетал меш компонентом и по итогу имеем в проекте скелетал меш и анимацию к нему которая просто играется играется в цикле. Сегодня я хочу заставить нашего персонажа передвигаться вперед и назад используя EIS.
Для начала нам стоит активировать сам плагин в проекте. Это нужно сделать в build файле проекта, либо поставив галочку в Plugins из под эдитора анрила:
Сам файл будет написан на С#, но нам это не важно, нам нужно найти строчку в которой перечисляются подключенные плагины и добавить EIS в неё:
В текущий момент у меня активирован дефолтный проект анрила с примером игры от третьего лица. В проекте который мы делаем по этой серии этой строчки не будет - её нужно добавить самостоятельно.
Теперь когда я активировал плагин давайте просмотрим весь процесс "связки" ввода и логики с использование EIS в блюпринтах. Для начала давайте создадим отдельную папку в проекте где будут лежать наши IA и IMC:
Теперь когда я активировал плагин давайте просмотрим весь процесс "связки" ввода и логики с использование EIS в блюпринтах. Для начала давайте создадим отдельную папку в проекте где будут лежать наши IA и IMC:
После чего мы создадим Input Action:
Внутри его мы сможем увидить его тип:
По умолчанию он bool. Пока что я оставлю его в том виде в котором он есть так как я хочу сначала удостовериться в том что сетап, который я сделаю чуть дальше, в целом рабочий и через него проходит поток даты.
Мы уже знаем что создание Input Action - это первый шаг. Для того чтобы этот Input Action мог быть связан с raw input мы должны создать Input Maping Context:
Мы уже знаем что создание Input Action - это первый шаг. Для того чтобы этот Input Action мог быть связан с raw input мы должны создать Input Maping Context:
После того как мы создали IMC - мы можем добавить наш IA в него:
И после назначить клавишу которая будет подавать значения:
Модификаторы и триггеры мы пока не будем применять. Оставим всё как есть и перейдем в блюпринт нашего Pawn и назначим наш IMC к контроллеру Pawn:
Для начала нам нужно получить наш контроллер, это сделаем через функцию GetController, после чего сделаем каст на PlayerController ровно так как написано в документации EIS и если каст будет успешным выведем сообщение на экран. Компилим и нажимаем play:
Получается каст прошел успешно! GetController в BP возвращает значение контроллера в то время как в С++ эта же функция будет возвращать указатель на контроллер. Теперь когда мы убедились в том что каст прошел успешно, если следовать документации, мы должны добавить IMC к этому контроллеру вызвав Enhanced Input Local Player Subsystem:
После его вызова нужно добавить контекст который мы будем использовать и далее указать конкретный контекст в дропдаун меню.
Теперь когда мы связали BeginPlay, контроллер и EIS надо решить что произойдет когда IA_Move сработает. Мы уже знаем что эвент срабатывания IA_Move генерируется автоматически в момент создания IA - поэтому мы можем спокойно его вызвать:
Теперь когда мы связали BeginPlay, контроллер и EIS надо решить что произойдет когда IA_Move сработает. Мы уже знаем что эвент срабатывания IA_Move генерируется автоматически в момент создания IA - поэтому мы можем спокойно его вызвать:
После мы спокойно можем выбрать что будет происходить когда он сработает:
Обратите внимание что у Эвента IA_Move есть Action Value и он подсвечен красным - красный означает что он имеет тип данных булиан и если я подам это значение в In String то произойдет конвертация типа данных из булиана в string. Проверим работает ли?
Это круто. Но на самом деле Print String не обязателен. Есть же консольная команда showdebug enhancedinput. Давайте отключим ноду и посмотрим что будет:
Смотрим в билд:
Важно! Консольная команда showdebug EnhancedInput != консольной команде showdebug enhancedinput - они разные.
С БП разобрались. Сделаем теперь то же самое используя С++
#ue5