Самое сложное в наделении ИИ-персонажа физической агентностью — это не научить его добиваться успеха. Это научить его открыто сообщать о своих неудачах.
Персонаж, который поднимает ящик и переносит его через движущуюся платформу, выглядит впечатляюще в демонстрационном ролике. Персонаж, который идет к ящику, обнаруживает, что путь заблокирован, и говорит об этом простым языком — это тот, кого можно выпускать в релиз, потому что игрок понимает, что пошло не так, не открывая журнал вывода (Output Log).
Это вторая часть серии о создании ИИ-напарника Convai в Unreal Engine, основанной на примере Epic Games под названием Stack O Bot для Unreal Engine. В первой части персонаж получил осведомленность об окружении, данные о состоянии игры в реальном времени и встроенные действия перемещения, которые позволяют ему подходить к объектам и вставать на нажимные плиты. Здесь он получает два собственных пользовательских действия: «поднять» (pickup) и «положить в» (drop-at), интегрированных в игровую логику, которая уже существовала в проекте.
В итоге ИИ-игрок воспринимает устную инструкцию, подходит к ящику, поднимает его, несет на нажимную плиту, ставит его, ждет платформу и помогает завершить головоломку для двух игроков исключительно с помощью общения.
Посмотрите полное руководство, которому шаг за шагом следует эта статья:
Что было создано в первой части и что добавляет вторая?
В первой части уровень был зарегистрирован в системе метаданных сцены Convai, чтобы персонаж знал, какие объекты существуют, были добавлены отслеживаемые свойства, чтобы он знал, какие нажимные плиты активны, и использовались четыре встроенных обработчика действий, поставляемых с плагином.
Эти встроенные функции, описанные в центре действий персонажа, очень полезны. Но они не охватывают поднятие предметов, потому что ни один плагин не может знать, что означает «поднять что-то» внутри вашего проекта. У Stack O Bot есть собственная система взаимодействия, написанная до появления Convai, и вторая часть посвящена тому, как подключиться к этой системе, а не заменять ее.
Такова общая структура пользовательских действий в любом проекте. Convai берет на себя определение намерений, выбор цели и отчетность. Ваш код отвечает за часть, специфичную для вашей игры.
Если вы начинаете с нуля, руководство по настройке Stack O Bot поможет вам создать проект в Unreal Engine 5.8 и скопировать поверх него дельта-файлы руководства. Вам также понадобится плагин Convai для Unreal Engine из Fab и установленный редактор с выполненным входом в систему.
Смотрите полную первую часть этого руководства здесь:
Два исправления настройки, которые стоит сделать перед написанием пользовательского действия
В первой части остались два недочета. Оба они незначительны, но оба влияют на то, насколько надежными кажутся пользовательские действия.
Добавьте точку перемещения для нажимной плиты
Когда персонаж двигался к нажимной плите, он иногда останавливался у края, вместо того чтобы встать на плиту. Плита регистрируется как объект, поэтому механизм перемещения останавливался на границах ее коллизии, что является правильным поведением по умолчанию для широких объектов, но неверным в данном случае.
Решение — точка перемещения (movement point). Откройте Blueprint нажимной плиты, перейдите в окно просмотра (viewport), выберите компонент Convai Object Component и добавьте точку перемещения в разделе объекта. Сдвиньте ее вверх, чтобы она оказалась над плитой. Зеленая стрелка в окне просмотра показывает, где будет стоять персонаж, а отладчик Convai Debug Overlay подтвердит это позже во время выполнения.
Точки перемещения — это пункты назначения, заданные дизайнером, и механизм Convai выбирает доступную точку с кратчайшим путем, а не просто координаты объекта. Каждая точка отображается как маркер с кольцом радиуса принятия, которое становится ярко-зеленым при включении и серым при отключении. Поскольку все нажимные плиты используют один Blueprint, точка реплицируется для каждого экземпляра.
При создании собственных точек стоит знать две детали из документации. Режим привязки по умолчанию — «Относительно объекта» (Relative To Object), что подходит для плиты или двери, в то время как «Сохранить мировое положение» (Keep World Position) подходит для чего-то вроде площадки лифта, которая должна оставаться на месте, пока платформа проезжает мимо. А активация опции «Создать отдельный пункт назначения» (Create Separate Destination) превращает точку в отдельную адресуемую цель, поэтому точка с именем «Другая сторона» на объекте «Дверь» становится пунктом назначения, куда персонажа можно отправить по имени.
Выставьте состояние движущейся платформы как отслеживаемое свойство
В первой части была добавлена переменная active для нажимных плит, чтобы Convai мог считывать, нажата ли каждая из них. У движущейся платформы не было эквивалента.
У платформы есть событие Toggle Platform, которое вызывает функцию Unreal Set Tick Enabled для актора. Это состояние тика и есть состояние платформы, поэтому его можно вывести через Convai Object Component в разделе отслеживаемых свойств (Tracked Properties). Добавьте свойство, найдите «tick» и выберите Is Actor Tick Enabled.
Важна псевдоним (alias). Отправка имени свойства движка в языковую модель — это лишний шум. Переименуйте его в «active» и дайте простое описание, например: «движется вверх и вниз по циклу, когда истинно». Теперь персонаж считывает факт о платформе, а не о системе тиков Unreal, что соответствует логике правильного именования и описания объектов в метаданных сцены.
Каждое отслеживаемое свойство имеет путь к свойству (Property Path), описание, дополнительные аннотации для каждого значения в разделе «Дополнительно» (Advanced) и настройку «Должен отвечать» (Should Respond), которая определяет, что происходит при изменении значения во время выполнения. «Должен отвечать» может принимать значения Auto, Always или Never. Начальное значение, отправляемое при запуске сессии, всегда имеет значение Never, поэтому персонаж узнает начальное значение, не проговаривая его. Система динамического контекста берет на себя остальное, а страница правил синхронизации объясняет правила пакетирования, если вам нужно, чтобы обновления применялись в определенный момент, а краткое руководство — это более быстрый путь к началу работы.
Что такое пользовательское действие Convai в Unreal Engine?
Пользовательское действие Convai — это именованная, описанная возможность, которую вы объявляете в компоненте Convai Chatbot в паре с событием или функцией Blueprint с тем же именем, которые запускаются, когда Convai выбирает это действие. Объявление отправляется в Convai как конфигурация действия при запуске сессии. Диспетчеризация происходит по имени во время выполнения.
Для работы одного действия нужны три элемента. Шаблон, который находится в массиве Actions и сообщает Convai, что действие существует. Обработчик, который представляет собой событие Blueprint с соответствующим именем. И вызов завершения, который сообщает о результате и позволяет очереди действий продвигаться дальше.
Пропустите любой из этих трех элементов, и ИИ-NPC будет выглядеть сломанным каждый раз по-новому, поэтому страница устранения неполадок начинается с совета следить за журналом вывода (Output Log).
Как определить «поднять» (pickup) и «положить в» (drop-at) с параметрами Actor Reference?
Выберите персонажа, откройте его Blueprint, найдите компонент Convai Chatbot и откройте раздел Actions в разделе Environment.
Добавьте действие с именем «Pick Up». Ему нужно знать, что поднять, поэтому добавьте параметр с именем «target». Целью будет объект на сцене, поэтому установите его тип в Actor Reference — тот же тип, который используют встроенные обработчики для своих пунктов назначения.
Добавьте второе действие с именем «Drop At». Оно берет то, что персонаж уже держит, и кладет это куда-то, поэтому добавьте параметр с именем «destination», также типа Actor Reference.
Затем напишите описания. Не длинные. Руководство по параметризованным действиям прямо говорит об этом: длинные описания увеличивают контекст, отправляемый в Convai, не улучшая при этом поведение, а пустое описание вполне уместно, если названия достаточно.
У действия Drop At (Бросить в) описание должно быть в любом случае, так как оно содержит предварительное условие. Фраза вроде «бросить объект, который персонаж уже поднял, в указанное место» сообщает модели, что удержание предмета является обязательным условием, что определяет, когда она вообще обращается к этому действию. Подсказки о предварительных условиях в описаниях — это самый дешевый способ повысить надежность всей системы, и на странице с практическими примерами показано несколько таких вариантов.
Компилируйте Blueprint персонажа после редактирования любого шаблона действия. Новое действие, которое никогда не появляется в режиме игры, почти всегда является нескомпилированным шаблоном, что на странице устранения неполадок указано как отдельный симптом.
Почему Actor Reference (ссылка на актора), а не обычная строка?
Convai поддерживает шесть типов параметров: String (строка), Actor Reference (ссылка на актора), Number (число), Bool (логическое значение), String с фиксированным списком вариантов (Choices) и Enum, привязанный к UENUM проекта. Полная таблица поведения типов находится в справочнике по Blueprint.
Actor Reference разрешается относительно ваших зарегистрированных массивов объектов и персонажей по точному имени. Это разрешение и есть ценность. Параметр типа String просто передал бы вам слово «ящик», и вам пришлось бы искать его самостоятельно — именно это метаданные сцены уже сделали за вас. Параметр типа Reference передает вам запись, что означает наличие указателя на активного актора, радиус принятия, любые созданные точки перемещения и описание, которое вы написали для модели.
В руководстве действие drop-at упрощено за счет того, что место назначения также является Actor Reference. Более общая реализация могла бы позволить персонажу рассуждать о местоположении, а не о зарегистрированном объекте, что является реальным выбором архитектуры, а не просто упрощением. Зарегистрированные объекты точны и ограничены. Свободные локации гибкие, но их гораздо сложнее проверить, поэтому пространственное восприятие вычисляет расстояние и доступность в одном центральном месте.
Последствие, которое стоит учесть: разрешение ссылок ищет только в зарегистрированной среде и больше нигде. Если Convai возвращает имя, которое не соответствует зарегистрированной записи, Get Param As Ref возвращает пустую запись. Короткие, характерные зарегистрированные имена исправляют больше таких проблем, чем любые изменения личности или промпта, а разделы о внимании и привязке ссылок объясняют, что делать, если для модели два объекта выглядят одинаково.
Как создать каркас обработчика действий в Blueprint?
Нажмите правой кнопкой мыши на пустую область Event Graph (графа событий) Blueprint персонажа и найдите Create Convai Action Handler. Выберите Pick Up (Поднять) и подтвердите. Повторите то же самое для Drop At (Бросить в).
Утилита редактора генерирует обработчик с именем, соответствующим действию, дает ему один вход Convai Result Action и в конце соединяет вызов Handle Action Completion. Вы можете выбрать событие в Event Graph или функцию в ее собственном графе.
Вы также можете создавать обработчики вручную с помощью Custom Event (пользовательского события) с точным именем действия и одним параметром Convai Result Action, так как диспетчеризация происходит по имени. Но все же используйте утилиту. Несоответствие имен обработчиков и неверные сигнатуры параметров — две самые частые причины, по которым действие никогда не срабатывает, и обе исчезают, когда редактор сам создает узел. Unreal разрешает имена обработчиков без учета регистра, но Stop Moving и StopMoving остаются двумя разными именами.
Внутри Pick Up структура Convai Result Action содержит параметры. Получите цель с помощью Get Param As Ref, введя имя target, чтобы оно соответствовало объявленному. Это вернет структуру с нужной вам ссылкой и несколькими полями, которые вам не нужны, поэтому сверните те, которые не используете, чтобы сохранить читаемость графа.
Библиотека доступа предлагает Get Param As String, As Number, As Bool, As Ref, As Byte для перечислений, а также Has Param в качестве проверки и Get First Param для действий с одним параметром, с дополнительными слоями для Choices и перечислений.
За что отвечает Handle Action Completion?
Каждый обработчик должен вызывать его на каждом пути выхода. Без этого вызова очередь действий останавливается, и последующие действия никогда не выполняются.
Он принимает пять входных данных. Is Successful (успешно ли), который по умолчанию равен true и управляет тем, продвигается очередь или очищается. Auto Report (автоотчет), который отправляет стандартное сообщение о результате обратно в Convai. Should Respond (должен ли отвечать), который решает, будет ли персонаж говорить о результате, и принимает значения Auto, Always или Never. Additional Note (дополнительное примечание) — расширенный контакт для текста, добавляемого к сгенерированному сообщению. И Delay (задержка) — количество секунд ожидания перед началом следующего действия.
Большинство обработчиков меняют только один из этих параметров. Остальные остаются по умолчанию, пока вам не потребуется голосовая обратная связь.
Есть еще один важный узел, о котором стоит знать. Abort Action Sequence очищает очередь и принимает Event Text (текст события) плюс опцию Should Respond. Рекомендуется использовать его, когда обработчик вообще не может восстановиться, например, при уничтожении целевого актора или невыполнимом предварительном условии. А Handle Action Completion с Is Successful, установленным в false, лучше использовать для результатов, которые персонаж может попытаться повторить или обыграть словами. В руководстве используется второй вариант для сбоя перемещения, что логично: заблокированный путь — это ситуация, которую персонаж может описать и попробовать снова.
Должны ли пользовательские действия быть атомарными?
Это вопрос проектирования, на котором останавливается руководство, и это самая важная идея во всем видео.
В принципе, каждое действие должно делать что-то одно. Move To отвечает за перемещение. Pick Up отвечает за подъем. Convai выстраивает их в последовательность, потому что именно для этого и нужен планировщик. Это atomicity применяется к агенту affordances, и у этого есть явная выгода: если Pick Up не удается, потому что персонаж слишком далеко, ошибка понятна. Сообщите об этом с примечанием, что персонаж не рядом с целью, и модель сможет решить подойти ближе и попробовать снова.
В руководстве намеренно сделано иначе. Pick Up сначала перемещается к цели, а затем поднимает ее. Меньше узлов, меньше запросов, меньше шансов, что последовательность прервется в середине процесса.
Оба выбора обоснованы, и стоит назвать этот компромисс. Атомарные действия дают модели возможность восстановиться и позволяют ей создавать поведение, которое вы не прописывали. Композитные действия дают вам детерминизм и меньше движущихся частей. Атомарные обычно выигрывают в открытых сценариях, где нельзя предвидеть порядок операций, таких как тренировочные симуляции, многопользовательские миры или поведение NPC в открытом мире. Композитные обычно выигрывают в жестко заданных последовательностях, где вы знаете структуру задачи.
Чего следует избегать, так это выбора без осознания. Композитное действие, которое скрывает три режима отказа за одним логическим значением, — это та версия, которую придется отлаживать в 2 часа ночи.
Как подключить Convai Move To к пользовательскому действию?
Convai Move To — это латентный узел Blueprint в категории Convai Movement. Он принимает Moving Actor (движущегося актора) и запись места назначения, и он разрешает целых акторов, конкретные components, сокеты и созданные точки перемещения без ручного подключения Resolve Goal Location.
Для Pick Up установите Moving Actor на self и передайте ссылку из параметра target в качестве места назначения.
У узла есть два выхода выполнения. Succeeded срабатывает при достижении цели (Reached) или если персонаж уже находится в пункте назначения (Already At Destination). Failed срабатывает во всех остальных случаях. Узел также возвращает код результата (Result Code) и дополнительное примечание (Additional Note), которые, согласно документации, можно безопасно передавать в Handle Action Completion или озвучивать игроку.
Перечисление Result Code содержит больше информации, чем можно ожидать. Оно различает состояния: Reached, Already At Destination, Unknown Destination, Unreachable, Invalid Character, Missing AI Controller, Missing Movement Component, Missing Path Following Component, Missing Navigation Data и Move Failed. Четыре из этих десяти указывают на проблемы с настройкой, а не на состояние мира, что делает это перечисление инструментом отладки в такой же степени, как и сигналом времени выполнения.
В ветке Failed продублируйте Handle Action Completion, установите Is Successful в значение false, сообщите о результате, запросите ответ и передайте Additional Note. Запрос ответа здесь важен. Персонаж, который не может добраться до ящика, не имеет полезных действий, поэтому он должен сказать об этом, а не просто стоять, пока игрок гадает, не завис ли игровой движок.
Если перемещение завершается неудачей по причине, которую перечисление относит к настройкам, наиболее вероятными виновниками являются навигационная сетка, которая не охватывает обе конечные точки, отсутствие класса AI Controller или не настроенное перемещение пешки (pawn). Плагин включает утилиту Setup Convai Pawn Movement в контекстном меню Blueprint персонажа для последнего случая, а Build Paths плюс клавиша P для визуализации во вьюпорте решают первую проблему.
Как подключить действие Convai к существующей игровой системе?
Именно здесь пользовательское действие перестает быть общим и становится частью вашего проекта.
Система взаимодействия Stack O Bot, написанная задолго до того, как к ней прикоснулся ИИ, использует переменную под названием Potential Interact. Чтобы что-то подобрать, персонаж устанавливает свой Potential Interact, а затем вызывает собственную функцию Interact проекта.
Есть один нюанс, и это тот самый случай, на который можно потратить целый день. Potential Interact ожидает компонент внутри ящика, а не сам Actor ящика. Откройте Blueprint ящика, и нужным компонентом будет его статическая сетка. Поэтому из ссылки на цель используйте Get Component By Class, чтобы получить компонент статической сетки, установите его как Potential Interact и вызовите Interact, убедившись, что версия относится к Blueprint ИИ-бота, а не к дочернему объекту.
Этот урок применим не только к данному проекту. Прежде чем писать пользовательское действие, изучите систему, к которой вы подключаетесь, и узнайте, в каком виде она ожидает входные данные. Работа с Convai занимает минуты. Интеграция занимает столько времени, сколько в существующем коде есть особенностей, а каждая игровая кодовая база в чем-то уникальна. Помощник с тегированием сцены и доступом к проекту ускоряет этот шаг.
Здесь же рабочий процесс Convai MCP для Unreal доказывает свою ценность, поскольку помощник, способный прочитать структуру вашего проекта, сокращает этап исследования.
Также смотрите: Convai MCP для Unreal Engine, рабочий процесс, использованный для настройки сцены в этой серии.
Как реализовать действие drop-at?
Drop At начинается так же. Считайте пункт назначения с помощью Get Param As Ref, передайте его в Convai Move To и обработайте ветку Failed с помощью Handle Action Completion, установив Is Successful в false и передав Additional Note узла.
Для самого сброса сначала нужна проверка.
Stack O Bot хранит ссылку на то, что держит персонаж. Перед тем как что-то бросить, проверьте, является ли эта ссылка валидной. Нажмите правой кнопкой мыши и выберите Convert To Validated Get, что разделит граф на валидную и невалидную ветки.
В невалидной ветке персонаж ничего не держит, поэтому Drop At завершается неудачей. Вызовите Handle Action Completion с сообщением вроде «у вас нет ничего, что можно бросить», и запросите ответ, чтобы персонаж мог это произнести. Эта фраза — вся ценность проверки. Без нее действие возвращает молчаливый false, и игрок не получает объяснений.
В валидной ветке разместите объект. Получите ссылку на пункт назначения, узнайте его местоположение и создайте новую позицию над ним, так как бросать ящик на нажимную плиту — не то, чего кто-либо хочет. Смещение применяется по оси Z. В руководстве добавляется 100 единиц по Z.
Затем получите сам ящик. Граф содержит компонент статической сетки, поэтому Get Owner вернет Actor, которому он принадлежит. Передайте это в Set Actor Location с позицией смещения, снова вызовите функцию Interact в Stack O Bot, чтобы отпустить предмет, и завершите работу с помощью Handle Action Completion, отмеченного как успешное.
Это вся реализация. Два действия, два параметра, по одной проверке на перемещение и одна проверка на состояние удержания.
Почему состояния неудачи важнее состояний успеха
Посмотрите, на что два обработчика тратят свои узлы. Примерно половина графа в каждом из них — это обработка ошибок, и это соотношение не случайно.
Путь успеха создает персонажа, который работает, когда мир идет навстречу. Пути неудачи создают персонажа, который остается в диалоге, когда это не так, что является обработкой исключений с голосом. Очередь действий принудительно реализует часть этого по дизайну, потому что установленный в false параметр Is Successful очищает оставшуюся очередь, вместо того чтобы продолжать выполнение плана, первый шаг которого не удался.
Руководство по устранению неполадок перечисляет пути выхода, о которых забывают команды: выходы по условиям проверки, которые возвращаются до начала работы; асинхронные обратные вызовы, где вызов завершения находится в недостижимой ветке; и анимационные монтажи, где On Interrupted не был подключен вместе с On Completed. Последнее — классика, из-за которой очередь зависает, пока плагин ждет танца, который был отменен.
Размещение узла Print String прямо перед каждым вызовом завершения, а затем подтверждение того, что каждый путь достигает одного из них, занимает пять минут и экономит гораздо больше. Convai Debug Overlay выполняет ту же работу для точек перемещения, рисуя маркер над каждой именованной, включенной точкой в мировом пространстве.
Как выглядит прохождение завершенной головоломки?
Тестовый прогон — это головоломка Stack O Bot для двух игроков, которую ни один из них не может решить в одиночку.
Игрок просит ИИ-напарника подержать нажимную плиту, чтобы он мог забраться наверх и сбросить ящик. Персонаж соглашается, называет плиту, к которой направляется, и идет. Когда ящик приземляется рядом, персонаж замечает это и спрашивает, следует ли ему подобрать ящик или у игрока другие планы. Получив указание использовать ящик для удержания плиты, он отвечает, что план освобождает его для перемещения, размещает ящик и сообщает о состоянии платформы, когда она стабилизируется.
Ни один из этих диалогов не был написан заранее. Была создана среда, которую персонаж может считывать, и два действия, которые он может выполнять. Разговор — это то, что происходит, когда эти две половины определены вместе, то же самое сочетание, которое лежит в основе нелинейного нарративного дизайна.
Момент, который стоит пересмотреть — это когда персонаж спрашивает, нужно ли поднять ящик. У него были возможности, была цель, но он все равно спросил, потому что появление ящика рядом с ним было изменением в мире, а не инструкцией. Такое поведение проистекает из отслеживаемых свойств и метаданных сцены, настроенных в первой части, а не из обработчиков действий во второй части. Восприятие и агентность — это отдельные системы, и персонаж ощущается как член команды только тогда, когда присутствуют обе, что доказывает работа с объектами во внимании со стороны восприятия.
Также посмотрите: Часть 1, «Состояние игры в реальном времени и настройка сцены», которая создает слой осведомленности, расширяемый в этом руководстве.
Распространенные проблемы и способы их решения
Персонаж говорит, но обработчик не запускается. Убедитесь, что в свойстве Environment (Окружение) чат-бота установлена галочка Enable Actions (Включить действия), затем проверьте, что имя шаблона действия совпадает с именем события в Blueprint, включая пробелы. В журнале вывода (Output Log) появится предупреждение об отсутствии функции, если диспетчер не сможет найти обработчик.
Обработчик существует, но пропускается. Функция должна принимать либо ноль параметров, либо один параметр Convai Result Action и больше ничего. Неверная сигнатура записывает предупреждение в журнал и оставляет очередь в режиме ожидания.
Одно действие выполняется, и последовательность останавливается. Какой-то путь не вызвал Handle Action Completion (Завершение обработки действия) или вызвал его со значением Is Successful (Успешно), равным false.
Новое действие не появляется в режиме игры (Play mode). Blueprint персонажа не был скомпилирован после редактирования шаблона.
Get Param As Ref возвращает пустую запись. Объект отсутствует в массиве Objects или Characters, или имя, возвращенное Convai, не совпадает с зарегистрированной записью. Вы можете добавлять записи во время выполнения с помощью Add Object и Add Character, наряду с установщиками взгляда и внимания, описанными в разделе управления окружением во время выполнения.
Персонаж подходит близко к объекту, но не к самому объекту. Либо создайте точку перемещения, либо установите для параметра Object Is значение Specific Component (Конкретный компонент) для небольших целей, таких как кнопки и рычаги. Радиус принятия (Acceptance Radius) по умолчанию составляет 150 сантиметров, что вполне достаточно для рычага.
Blueprint перестал компилироваться после обновления плагина. В руководстве по миграции для версии 4.0.0-beta.27 перечислены все удаленные контакты (pins) и переименованные поля с указанием правок, которые необходимо внести.
По любым вопросам, не перечисленным здесь, обращайтесь на форум разработчиков Convai (Convai Developer Forum), где можно задать вопросы по настройке и сообщить об ошибках. В теме, посвященной этому руководству, собираются вопросы от людей, проходящих те же этапы, как и в более широкой категории руководств и учебных пособий, а также в теме первой части.
Где этот шаблон применяется за пределами игр-головоломок?
Поднять и положить — это решение головоломки. Лежащий в их основе шаблон универсален: объявите возможность, определите цель на сцене, вызовите систему, которая уже отвечает за это поведение, и сообщите о результате на языке, на котором может говорить персонаж.
Замените ящик на инструмент, и вы получите симулятор обучения, где персонаж-инструктор демонстрирует процедуру. Замените его на товар, и вы получите виртуальный ИИ-аватар, перемещающий запасы на складе в розничной торговле, используя загруженные руководства через банк контекстных знаний (In-Context Knowledge Bank). Замените всю среду на программное обеспечение, и тот же цикл «объявление-разрешение-выполнение-отчет» будет управлять действиями ИИ по отношению к внешним инструментам и системам через MCP.
Движок меняется, цель меняется, контракт отчетности — нет. Convai поставляет ту же систему действий в Unity с другим набором исполнителей, а многопользовательская и повествовательная стороны платформы используют одни и те же результаты.
Начало работы
Если сторона Unreal Engine для вас нова, руководство по настройке плагина охватывает установку и вход в систему, прежде чем приступать к чему-либо из этого.





