(Исправить картинки) 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, который будет определять поведение каждого слота смарт-объекта.
В Браузере контента дважды щелкните 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.
- Перетащите переменную 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.
- Перетащите с On Succeeded узел Use Claimed Smart Object, затем найдите и выберите Finish Execute. Включите флажок Sucess на узле.
- В Браузере контента дважды щелкните BT_SO_Agent , чтобы открыть его. Перетащите из узла Root и выберите Selector.
- Перетащите узел Selector и выберите Wait. Этот узел заставит агента подождать 5 секунд перед поиском нового смарт-объекта, если первоначальный поиск не увенчался успехом.
- Убедитесь, что узел Sequence находится слева от узла Wait . Это гарантирует, что последовательность будет выполнена первой в дереве поведения.
- Перетащите из узла Sequence и выберите Wait. Выбрав узел, установите Время ожидания на 2,0 и Случайное отклонение на 0,5. В этом узле агент будет ждать от 1,5 до 2,5 секунд, прежде чем искать новый смарт-объект.
В этом разделе вы создали дерево поведения и задачи дерева поведения, которые позволяют агенту находить и использовать смарт-объекты на уровне.
6 - Создание агента искусственного интеллекта
В этом разделе вы создадите агента ИИ, который будет искать смарт-объекты на уровне.
- Выберите все узлы в 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 актор на ваш уровень. Масштабируйте сетку так, чтобы она покрывала ваш уровень, и агент мог перемещаться к месту назначения.
В этом разделе вы подтвердили, что агент может находить и использовать смарт-объекты на уровне.