Публичное обучение - использование плагина Blueprint (без кода!)

У меня нет абсолютно никакого опыта работы с Unreal Engine (UE4), но, поскольку я вел переговоры на встречах и конференциях о своей работе с Unity (в которой у меня также не было опыта примерно полтора года назад), Часто задавался вопрос: Будет ли это работать в Unreal?.

До сих пор этот ответ был я не знаю или как член сообщества вы всегда можете что-то построить и открыть исходный код!. Я знаю, что в какой-то момент были предприняты небольшие массовые усилия по созданию Watson SDK для Unreal, такого как Watson SDK for Unity, но официального SDK для Unreal не существует.

Итак, будет ли Watson SDK for Unity работать в Unreal? Нет. Но это никому не мешает работать со службами Watson API через базовое использование REST.

Может, пора заставить что-нибудь работать.

С чего начать с Unreal

Unreal - это движок C ++, и, конечно же, я не написал ни строчки на C ++ за лет. Итак, я сделал то, что сделал бы любой разработчик, я загрузил движок и искал какой-то образец проекта, чтобы открыть и выяснить, как и где я мог бы написать немного C ++ для вызова REST API.

Я начал новый, пустой, (очевидно) проект Blueprint, потому что я даже не стал читать пользовательский интерфейс, и, если быть честным, Unreal очень загружен. Я уверен, что Unity поначалу тоже так чувствовала, но это был один из первых экранов, которые я увидел, и меня напугало количество вариантов. Мне казалось, что мне нужно принять множество решений о вещах, которые я еще не полностью понимал - например, в конце концов, я хочу создать портативную дополненную реальность, но я еще не был готов к этому.

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

Зная это, я хотел выяснить, как загрузить мой вызов REST API в событие начальной загрузки / готовности / запуска, поскольку он не зависит от загружаемой сцены или каких-либо объектов, присутствующих или находящихся в состоянии готовности.

Я сделал скриншоты поздно, но примерно так выглядел проект с включенным образцом. У меня есть сцена, некоторые объекты, что-то, что выглядит как солнце или сияющая сила тяжести, и некоторая концепция того, куда будут указывать мои глазные яблоки (?).

Итак, я делаю то, что делает любой разработчик, я начинаю щелкать по сторонам и пытаться что-то делать. Я нажимаю кнопку воспроизведения, чтобы запустить сцену, и слышу какой-то свет снаружи, похожий на чириканье птиц. Аккуратный!

Куда идет код?

Опять же, основываясь на моем фундаментальном представлении о том, как работают игровые движки, я знал, что мне нужно где-то добавить какой-то компонент сценария. Что еще более важно, мне нужно иметь возможность добавить его туда, где он действительно сработает, а не просто сидеть там, ожидая срабатывания триггера, который может не сработать, вызывая отладку, которая на самом деле может не происходить.

Я щелкаю один из стульев, вижу количество компонентов и способ добавления компонента.

У меня есть два варианта создания сценариев: один - это новый компонент сценария Blueprint, а другой - новый компонент C ++.

Я выбрал компонент C ++ и получил окно о выборе родительского класса.

Если бы мне пришлось угадывать, а я это делал, для моего конкретного случая использования я мог бы использовать либо актера, либо компонент сцены. Мне действительно не нужно прикреплять его к чему-то конкретному, но на основе моего примера Unity я хочу поместить код в Actor, потому что я хочу, чтобы опыт ощущался так, будто Ватсон говорит через персонажа, а не через небо или что-то еще. другой элемент сцены.

Итак, я создал компонент C ++ для Актера и понял, что мне не нравится это решение, но оно дало мне хорошее представление о функциях игрового движка.

Я знал, что мне нужно будет разместить любой код или вызовы моего кода REST API в функции BeingPlay (), чтобы, как только игра запустится (если не раньше), я запустил свой код, и он не просто сидел там праздный.

Хорошо, но как позвонить в службу?

Думаю, именно здесь я понял, что понятия не имел, как вызвать службу REST на C ++. Итак, я начал поиск и как-то наткнулся на сообщение на форуме Unreal о плагинах Blueprint. Чертежи знакомы… вроде.





Я нашел два многообещающих плагина, VaRestPlugin и JSONQuery. Оба показали многообещающие скриншоты, но я зашел в VaRestPlugin и решил попробовать. Но как мне сделать Blueprint?

Работа с чертежами

Этот следующий фрагмент будет скорее прикладным изучением Blueprints, поэтому, если вы ищете определения, могу ли я порекомендовать документацию, которую, конечно, я не читал, потому что зачем мне тратить время на это, когда Я хочу что-то сделать.

Чертежи перечислены на этом основном представлении проекта и содержат раскрывающийся список. Я выбрал «Open Level Blueprint», надеясь, что это приведет меня в место, которое автоматически сработает в начале игры (или, по крайней мере, предоставит мне параметры функций, как я видел в компоненте C ++, вместо того, чтобы создавать новый компонент Blueprint и беспокоить его. никогда бы не позвонили.

Я пробираюсь через интерфейс Blueprint UI, пытаясь добавить новые узлы. Щелчок правой кнопкой мыши по пользовательскому интерфейсу делает то, что я ожидал, - позволяет мне добавлять новые узлы. Но между контекстно-зависимыми и неконтекстно-зависимыми узлами… У меня ТАКОЕ МНОГО ВАРИАНТОВ.

Создание потока

Чувствуя себя подавленным, мне удается попасть в раздел VaRestPlugin. Все, что я хочу сделать, это вставить узлы, похожие на снимок экрана, который я видел для создания GET. Это должно выглядеть примерно так:

Fire BeingPlay(?) event > Build GET request (plus auth) > Fire GET request > Print JSON result

VaRestPlugin дает мне все, что мне нужно, но я понимаю, что мне потребуется пройти аутентификацию с помощью базовой аутентификации, только с парой ключ / значение в заголовке.

На самом деле это не проблема, я вытаскиваю свой хешированный заголовок аутентификации из Postman, который я использовал для тестирования этого конкретного GET, чтобы убедиться, что служба не выдает никаких странных ошибок, поскольку я создаю ее здесь.

Я добавляю «Авторизация» к имени заголовка и помещаю свой хешированный заголовок аутентификации в «Значение».

Прежде чем я установлю заголовок, мне нужно создать объект запроса, указав глагол. Я нахожу узел «Создать запрос JSON».

Мне нужно место для фактического размещения URL, поэтому я начинаю исследовать «Применить URL» и «Обработать URL». Кажется, что «Применить URL» действительно что-то возвращает, а «URL-адрес процесса» просто инициирует запрос.

Этот довольно пояснительный: URL-адрес, по которому вы хотите перейти, находится в поле URL-адреса. Но как мне распечатать результат объекта запроса? Хм.

Разочарование в Blueprints…

Я собираю все вместе, кроме самого простого, самого простого узла «SET», который, как я могу только предположить, - это то, что мне нужно для создания общего запроса.

Я сдаюсь на 2 дня. Я не вижу «SET» в разделе узла VaRestPlugin, и меня это раздражает.

Решаю почитать документацию Blueprint, особенно раздел Переменные.

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

Объект «Мой запрос» становится целью для всех узлов построения запроса. Но я все еще не уверен в том, как распечатать ответ, но в итоге нашел некоторую информацию о кодировании JSON и печати строки.

Успешная работа с чертежами!

Наконец, я создаю GET для возврата настроенных акустических аудиофайлов, которые я использовал для обучения моей пользовательской акустической модели для Watson Speech to Text.

Я скрещиваю пальцы, сохраняю / компилирую и нажимаю кнопку воспроизведения. Оно работает!!! Я вижу в консоли список своих аудиофайлов!

Что теперь?

Я не могу многое с этим поделать, но это помогает мне преодолеть препятствие - просто подключиться к службе REST и получить ответ.

Теперь я могу работать над созданием примера, подобного моему AR-паттерну в Unity. Хотите это увидеть? Потому что я заинтересован в его создании, если вы хотите!

Вы создаете что-то в Unreal Engine, которое могло бы использовать сервисы AI? Дай мне знать в комментариях!