Unreal engine 5
May 1

(Исправить картинки) Smart Objects в Unreal Engine 5. Быстрый старт

В этом руководстве показано, как создавать и использовать смарт-объекты с агентом искусственного интеллекта.

Обзор

Умные объекты - это объекты, размещенные на уровне, с которыми могут взаимодействовать агенты ИИ и игроки. Эти объекты содержат всю информацию, необходимую для взаимодействия.

На высоком уровне Смарт-объекты представляют собой набор действий на Уровне, которые можно использовать с помощью системы резервирования. Эта система отслеживает все смарт-объекты на Уровне и позволяет агенту ИИ "зарезервировать" смарт-объект, чтобы другие агенты не могли его использовать до тех пор, пока он не станет снова доступен.

Цели

В этом кратком руководстве вы узнаете, как создавать и использовать смарт-объекты с агентом искусственного интеллекта.

Задачи

  • Создайте AI Gameplay Behavior и Behavior Definition, которые агент ИИ может использовать, когда достигает Smart Object.
  • Создайте Smart Object, содержащий Behavior Definition для воспроизведения анимационного монтажа.
  • Создайте простое поведение ИИ с помощью Behavior Tree и Behavior Tree Tasks.
  • Создайте AI Agent, который может искать и использовать Smart Objects на уровне.

1 - Необходимая настройка

Создайте новый Blueprint проект на основе шаблона Third Person.

В главном меню перейдите к пункту Settings > Plugins, чтобы открыть окно Plugins.

Перейдите в раздел Gameplay и включите плагины Smart Objects, AI Behaviors и Gameplay Behavior Smart Objects. При появлении запроса перезапустите редактор.

Результаты

В этом разделе вы создали новый проект и включили плагины Smart Objects и AI Behaviors. Теперь вы готовы к созданию AI Gameplay Behavior для вашего AI Agent.

2 - Создайте AI Gameplay Behavior

В этом разделе вы создадите блупринты Gameplay Behavior и Gameplay Config, которые определят, что будет делать ваш агент, когда он достигнет слота Smart Object.

  • В Content Browser щелкните правой кнопкой мыши и выберите Blueprint Class в разделе Create Basic Asset.

В окне Pick Parent Class раскройте раздел All Classes, затем найдите и выберите Gameplay Behavior. Нажмите Select и назовите новый ассет BP_SO_Behavior_PlayMontage.

Создайте новый класс Blueprint, затем найдите и выберите Gameplay Behavior Config. Нажмите Select и назовите новый ассет BP_SO_BehaviorConfig.

В Браузере контента дважды щелкните BP_SO_BehaviorConfig, чтобы открыть его. Перейдите на панель Details и щелкните на раскрывающемся списке Behavior Class. Выберите BP_SO_Behavior_PlayMontage. Скомпилируйте и сохраните блупринт.

В Браузере контента дважды щелкните BP_SO_Behavior_PlayMontage, чтобы открыть его. Щелкните на раскрывающемся списке Override рядом с Functions и выберите OnTriggeredCharacter.

Щелкните правой кнопкой мыши на Avatar узла Event OnTriggeredCharacter и выберите Promote to Variable.

Перетащите переменную Avatar в Event Graph и выберите Get Avatar. Перетащите из узла Avatar, затем найдите и выберите Get Component by Class.

Нажмите на выпадающий список Component Class, затем найдите и выберите Skeletal Mesh Component.

Щелкните правой кнопкой мыши на графике событий Event Graph, затем найдите и выберите Play Montage.

Подключите вывод Return Value узла Get Component by Class к выводу In Skeletal Mesh Component узла Play Montage.

Подключите узел Set Avatar к узлу Play Montage.

Щелкните раскрывающийся список Montage to Play на узле Play Montage. Выберите анимационный монтаж из списка.

Если у вас нет анимации, вы можете получить бесплатные пакеты анимационных ассетов в Unreal Engine Marketplace, например Animation Starter pack. Вы также можете преобразовать любую анимационную последовательность в анимационный монтаж, щелкнув ее правой кнопкой мыши и выбрав Create > Create AnimMontage.

Перетащите переменную Avatar в Event Graph и выберите Get Avatar. Перетащите из узла Avatar , затем найдите и выберите End Behavior.

Подключите контакты On Completed и On Interrupted от узла Play Montage к узлу End Behavior.

Скомпилируйте и сохраните блупринт.

В этом примере используется узел Play Montage, а не узел Play Anim Montage, чтобы использовать контакты On Completed и On Interrupted для завершения поведения. Это гарантирует, что смарт-объект останется занятым до окончания воспроизведения анимации.

Результаты секции

В этом разделе вы создали чертежи Gameplay Behavior и Gameplay Config Blueprints, которые агент будет использовать для воспроизведения анимационного монтажа, когда достигнет слота смарт-объекта. Теперь вы можете создать определение поведения, которое будет использоваться смарт-объектом.

3 - Создание ассета данных Smart Object Definition

В этом разделе вы создадите ассет данных SmartObject Definition, который будет определять поведение каждого слота смарт-объекта.

  • В Браузере контента щелкните правой кнопкой мыши и выберите Miscellaneous > Data Asset.
    1. В окне Pick Class for Data Asset Instance найдите и выберите Smart Object Definition.
    2. Нажмите Select , чтобы создать ассет, и назовите его SO_Definition_PlayMontage.

В Браузере контента дважды щелкните SO_Definition_PlayMontage, чтобы открыть его. Прокрутите страницу вниз до раздела Smart Object и нажмите кнопку Add (+) рядом с Slots, чтобы добавить новый слот. Это слот, который будет использоваться агентом ИИ при выполнении поведения.

Нажмите кнопку Add (+) рядом с Default Behavior Definitions и выберите Gameplay Behavior Smart Object Behavior Definition для Index 0. Щелкните на раскрывающемся списке Gameplay Behavior Config и выберите BP_SO_BehaviorConfig.

Сохраните и закройте блупринт.

Результаты секции

В этом разделе вы создали актив данных SmartObject Definition, который определяет каждый слот смарт-объекта и его поведение по умолчанию.

4 - Создание смарт-объекта

В этом разделе вы создадите смарт-объект, который может быть найден и использован агентом на уровне.

  • В Content Browser щелкните правой кнопкой мыши и выберите Blueprint Class в разделе Create Basic Asset.
  • В окне Pick Parent Class нажмите кнопку Actor class, чтобы создать актив. Назовите новый актив BP_SO_RunBT.
  • В Браузере контента дважды щелкните BP_SO_RunBT, чтобы открыть его. Перейдите в окно Компоненты и нажмите кнопку + Добавить . Найдите и выберите Smart Object.
  • Выбрав компонент SmartObject , перейдите на панель Details и прокрутите вниз до раздела Smart Object. Щелкните на раскрывающемся списке Definition Asset и выберите SO_Definition_PlayMontage.
  • Скомпилируйте и сохраните блупринт.

Результаты секции

В этом разделе вы создали смарт-объект и добавили определение поведения, определяющее поведение его слота по умолчанию.

5 - Создание дерева поведения для агента искусственного интеллекта

В этом разделе вы создадите необходимое поведение для агента ИИ, чтобы он мог искать и использовать смарт-объекты на уровне. Для этого вы будете использовать простое дерево поведения и две пользовательские задачи дерева поведения.

Создайте дерево поведения и черную доску

  • В Браузере контента щелкните правой кнопкой мыши и выберите AI > Blackboard. Назовите Blackboard BB_SO_Agent.
  • Дважды щелкните BB_SO_Agent , чтобы открыть его. Щелкните раскрывающийся список Новый ключ и выберите SO Claim Handle. Назовите ключ ClaimHandle. Сохраните и закройте Blackboard.
  • В Браузере контента щелкните правой кнопкой мыши и выберите AI > Behavior Tree. Назовите дерево поведения BT_SO_Agent.

Создание задач дерева поведения

Поиск смарт-объектов

  • В Content Browser щелкните правой кнопкой мыши и выберите Blueprint Class в разделе Create Basic Asset.
  • В разделе All Classes найдите и выберите BT Task Blueprint Base, затем нажмите Select. Назовите блюпринт BTT_FindSmartObject.
  • В Браузере контента щелкните правой кнопкой мыши BTT_FindSmartObject и выберите Duplicate. Назовите новый чертеж BTT_UseSmartObject.
  • В Браузере контента дважды щелкните BTT_FindSmartObject , чтобы открыть его. В Графе событий щелкните правой кнопкой мыши, затем найдите и выберите Событие Получение Выполнение ИИ.
  • Перетащите с выводов Owner Controller узла Event Receive Execute AI, затем найдите и выберите Get Blackboard.

Щелкните правой кнопкой мыши на значке Return Value узла Get Blackboard и выберите Promote to Variable. Назовите переменную Blackboard.

Подключите узел Event Receive Execute AI к узлу Set Blackboard.

Перетащите Pawn с Controlled Pawn узла Event Receive Execute AI, затем найдите и выберите Get Actor Location.

Перетащите из узла Return Value узла Get Actor Location, затем найдите и выберите Subtract.

Перетащите из узла Return Value узла Get Actor Location, затем найдите и выберите Add.

Установите значения X, Y и Z обоих узлов на 2000. Это создает поле поиска размером 4000 x 4000 единиц, или 40 x 40 метров вокруг агента

  • На графике событий Event Graph щелкните правой кнопкой мыши, затем найдите и выберите Make Box.
  • Подключите узел Subtract к контакту Min узла Make Box.
  • Подключите узел Add к контакту Max узла Make Box.
  • В Event Graph щелкните правой кнопкой мыши, затем найдите и выберите Get Smart Object Subsystem.
  • Перетащите из узла Подсистема смарт-объектов, затем найдите и выберите Найти смарт-объекты.
  • Перетащите мышью Request из узла Find Smart Objects и выберите Make SmartObjectRequest.
  • Подключите вывод Return Value узла Make Box к выводу Query Box узла Make SmartObjectRequest.
  • Перетащите с Filter pin узла Make SmartObjectRequest и выберите Make SmartObjectRequestFilter.
  • Перетащите из области Behavior Definition Classes, найдите и выберите Make Array.
  • Щелкните на выпадающем списке узла Make Array и выберите GameplayBehaviorSmartObjectBehaviorDefinition.
  • Подключите узел Set Blackboard к узлу Find Smart Objects.
  • Вот как выглядит проект на данный момент.
  • Щелкните правой кнопкой мыши вывод Out Results узла Find Smart Objects и выберите Promote to Variable. Подключите узел Out Results к узлу Blackboard.
  • Перетащите булавку из узла Результаты, затем найдите и выберите Из валидного индекса.
  • Перетащите из узла Is Valid Index, затем найдите и выберите Branch. Подключите узел Out Results к узлу Branch .
  • Перетащите из False концентратор узла Branch , затем найдите и выберите Finish Execute. Результаты Выхода будут недействительными, если ни один из близлежащих смарт-объектов не соответствует критериям поиска.
  • Создайте узел Smart Object Subsystem в Event Graph. Перетащите объект из узла, затем найдите и выберите Claim.
  • Подключите контакт True узла Branch к узлу Claim .
  • Перетащите переменную Out Results в Event Graph и выберите Get Out Results. Перетащите переменную из узла, затем найдите и выберите Random Array Item.
  • Перетащите из узла Random и подключите его к выводу Request Results узла Claim .
  • Щелкните правой кнопкой мыши на выводе Return Value узла Claim и выберите Promote to Variable. Назовите переменную ClaimHandle.
  • Перетащите из узла Claim Handle, затем найдите и выберите Is Valid Smart Object Claim Handle.
  • Перетащите из Возвращаемое значение узла Is Valid Smart Object Claim Handle, затем найдите и выберите Branch.
  • Перетащите из False концентратор узла Branch , затем найдите и выберите Finish Execute.
  • Перетащите переменную Blackboard в Event Graph и выберите Get Blackboard.
  • Перетащите из узла Blackboard , затем найдите и выберите Set Value as SOClaim Handle.
  • Подключите контакт True узла Branch к узлу Set Value as SOClaim Handle.
  • Щелкните правой кнопкой мыши на значке Имя ключа узла Set Value as SOClaim Handle и выберите Promote to Variable.
  • Выбрав переменную Key Name, перейдите на панель Details и установите флажок Instance Editable. Установите Значение по умолчанию на ClaimHandle.

  • Перетащите переменную ClaimHandle и подключите ее к контакту Value узла Set Value as SOClaim Handle.
  • Перетащите из узла Set Value as SOClaim Handle, затем найдите и выберите Finish Execute. Включите флажок Success на узле.
  • Скомпилируйте и сохраните чертеж.

Используйте смарт-объект

  • В Браузере контента дважды щелкните BTT_UseSmartObject , чтобы открыть его. В Графе событий щелкните правой кнопкой мыши и найдите, а затем выберите Событие Получение Выполнить ИИ.
  • Перетащите с выводов Owner Controller узла Event Receive Execute AI, затем найдите и выберите Get Blackboard.
  • Перетащите из узла Return Value в узел Get Blackboard, затем найдите и выберите Get Value as SOClaim Handle.
  • Щелкните правой кнопкой мыши на значке Имя ключа узла Получить значение как SOClaim Handle и выберите Передать в переменную.
  • Выбрав переменную Key Name, перейдите на панель Details и установите флажок Instance Editable. Установите Значение по умолчанию на ClaimHandle.
  • Перетащите из узла Return Value в узел Get Value as SOClaim Handle, затем найдите и выберите Use Claimed Gameplay Behavior Smart Object.
    1. Подключите узел Get Value as SOClaim Handle к узлу Use Claimed Smart Object.
    2. Перетащите с Owner Controller узла Event Receive Execute AI и подключите его к контакту Controller узла Use Claimed Smart Object.
  • Перетащите с On Succeeded узел Use Claimed Smart Object, затем найдите и выберите Finish Execute. Включите флажок Sucess на узле.
  • Скомпилируйте и сохраните чертеж.

Создайте дерево поведения

  • В Браузере контента дважды щелкните BT_SO_Agent , чтобы открыть его. Перетащите из узла Root и выберите Selector.
  • Перетащите из узла Selector и выберите Sequence.
    1. Перетащите узел Selector и выберите Wait. Этот узел заставит агента подождать 5 секунд перед поиском нового смарт-объекта, если первоначальный поиск не увенчался успехом.
    2. Убедитесь, что узел Sequence находится слева от узла Wait . Это гарантирует, что последовательность будет выполнена первой в дереве поведения.
  • Перетащите из узла Sequence и выберите BTT_FindSmartObjects.
  • Перетащите из узла Sequence и выберите BTT_UseSmartObjects.
  • Перетащите из узла Sequence и выберите Wait. Выбрав узел, установите Время ожидания на 2,0 и Случайное отклонение на 0,5. В этом узле агент будет ждать от 1,5 до 2,5 секунд, прежде чем искать новый смарт-объект.
  • Сохраните и закройте дерево поведения.

Результаты секции

В этом разделе вы создали дерево поведения и задачи дерева поведения, которые позволяют агенту находить и использовать смарт-объекты на уровне.

6 - Создание агента искусственного интеллекта

В этом разделе вы создадите агента ИИ, который будет искать смарт-объекты на уровне.

  • В Браузере контента дважды щелкните на BP_ThirdPersonCharacter Blueprint, чтобы открыть его.
  • Выберите все узлы в Event Graph и удалите их. Щелкните правой кнопкой мыши на Event Graph, затем найдите и выберите Event Possessed
  • Перетащите со вывода New Controller узел Event Possessed, затем найдите и выберите Cast to AI Controller. Подключите узел Event Possessed к узлу Cast to AIController.
  • Перетащите из выводов As AIController узла Cast to AIController, затем найдите и выберите Run Behavior Tree. Щелкните раскрывающийся список BTAsset и выберите BT_SO_Agent.
  • Скомпилируйте и сохраните блупринт.

Результаты секции

В этом разделе вы создали чертеж AI Agent, который будет искать смарт-объекты на уровне. Вы также изменили чертеж анимации, чтобы убедиться, что анимационный монтаж может воспроизводиться правильно.

7 - Проверка смарт-объектов

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

  • На главной панели инструментов нажмите Add Content (+) > Volumes > NavMeshBoundsVolume, чтобы добавить новый Navigation Mesh актор на ваш уровень. Масштабируйте сетку так, чтобы она покрывала ваш уровень, и агент мог перемещаться к месту назначения.
  • Перетащите несколько BP_SO_RunBT Blueprints на свой уровень.
  • Перетащите ThirdPersonCharacter Blueprint на свой уровень.
  • Нажмите Симуляция , чтобы увидеть, как агент находит и использует смарт-объекты на уровне.

Результаты секции

В этом разделе вы подтвердили, что агент может находить и использовать смарт-объекты на уровне.