Внедрить проект Unreal Engine 4 в другое приложение

#ios #nativescript #unreal-engine4

#iOS #nativescript #unreal-engineer4

Вопрос:

Я пытался работать над доказательством концепции (POC), где я могу встроить проект UE4 в существующее приложение (в моем случае NativeScript), но это может так же легко применяться к Kotlin или ReactNative.

В доказательстве концепции я смог довольно легко запускать проекты на своем iPhone, начиная с UE4, следуя инструкциям Blueprint и C для FPS. Однако на следующем этапе моего POC требуется, чтобы я встроил FPS в существующее приложение NativeScript, это приложение будет управлять корневым меню, чатом и хранением аспектов платформы в POC.

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

Кто-нибудь видел проект, делающий это раньше, и если да, есть ли какие-либо блоги или рекомендации, на которые вы могли бы мне указать? Я искал и искал в течение пары недель и зашел в тупик. Я нашел здесь сообщение с отзывом от апреля 2020 года, в котором говорилось о публикации в январе 2020 года, в которой говорилось о том, как Unity может встраиваться в другие приложения, а также вопрос от 2014 года здесь. Но в остальном это тупик.

Дерево файлов по запросу

Комментарии:

1. Можете ли вы поделиться сгенерированным деревом файлов проекта Xcode?

2. Добавлено @florian, если вы хотите, я также могу расширить любую из папок.

3. @zmanc вы смогли это выяснить? Я пытаюсь сделать что-то подобное, было бы очень полезно, если бы вы могли указать на несколько вещей, спасибо

4. @ShivamPal, в итоге я просто отложил его, пока кто-нибудь другой не смог его запустить. Если вам повезет, пожалуйста, ответьте, чтобы я мог скопировать вас.

Ответ №1:

Немного другой подход

Отказ от ответственности: Я не разработчик UE4. Виновен в том, что увидел неотвеченную награду, слишком большую, чтобы ее игнорировать. Итак, я начал думать и искать — и я нашел кое-что, что можно было бы приспособить к вашим потребностям. Входит в поток пикселей.

Pixelstreaming — это бета-версия, которая в первую очередь предназначена для встраивания игры в браузер. Это открывает двустороннюю связь между сервером, на котором выполняются вычисления с высокой нагрузкой на GPU, и браузером, в котором игрок может взаимодействовать с контентом — щелчок мыши и другие события отправляются обратно на сервер. По-видимому, это позволяет использовать некоторые дополнительные полезные вещи, однако это не имеет отношения к рассматриваемому вопросу.

Поскольку вы хотите внедрить приложение Unreal в свой инструмент NativeScript (какое-то меню, если я правильно понял), вы могли бы создать свое приложение из двух отдельных частей:

  • Одна часть будет запускать сервер.
  • Вторая часть будет обрабатывать наложение с помощью потока пикселей.

Это сводит проблему встраивания UE4 в приложение к (возможно, более простой) проблеме встраивания браузера в ваше приложение. (Или, если ваше приложение основано на браузере — вуаля, проблема решена.)
Если вы не хотите обрабатывать удаленную связь, просто запустите серверную часть на локальном хосте.(С приятным побочным эффектом экономии пропускной способности.) В качестве альтернативы, если вы чувствуете себя предприимчивым, вы можете пойти и написать собственную поддержку WebRTC на стороне приложения, чтобы полностью обойти необходимость использования браузера. Возможно, это не стоит затраченных усилий.

Примечание: первая из предоставленных вами ссылок — это запрос функции, который намекает на тот печальный факт, что UE4 не поддерживает встраивание. Это еще более усиливается тем фактом, что один из людей там говорит что-то вроде «Unity может это сделать, было бы неплохо, если бы UE4 тоже мог».

И все же другой подход:

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

В этом потоке предлагается аналогичный подход:

В общем, способ подключения двух подобных библиотек — использовать дескриптор окна, зависящий от платформы, например, HWND под Windows. Проверьте UE api, если вы найдете какой-либо способ привязать цель рендеринга к HWND. Затем вы можете создать wxWindow в wxWidgets и указать UE для отображения в этом окне. Это было бы первым шагом.

Я не уверен, что все, что я перечислил, будет очень полезным, но, по крайней мере, я попытался :-). Удачи вам в игре.

В то же время автор предлагает:

Устраните проблему:

Использование платформы UE4 slate и онлайн-подсистемы. Вы могли бы использовать первый для создания нужных вам меню непосредственно в UE4, а затем использовать последний для ссылки на логику, которую вы хотите иметь за пределами UE4. Однако это не то, о чем вы просили, поэтому я перечисляю это только для полноты картины.