Проектирование инструментов генерации структур Hinted-execution Behavior Trees для Unity


 

Программирование поведения агентов в играх – трудоёмкий и сложный процесс. В современных системах поведение агентов основывается на данных об окружении, поступающих в режиме реального времени. Задача может приобретать высокую вычислительную сложность, поскольку возникает необходимость в постоянном отслеживании изменений и соответствующей модификации поведения. В данной работе предлагается метод создания структур, которые позволят оптимизировать и упростить задачу вычисления поведения агентов в играх.

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



Рис. 1. Пример дерева поведения с подсказками

Инструмент генерации структур реализован в виде модуля для платформы Unity с использованием языка программирования C#. На вход генератору подаётся список знаний об окружении и возможностях агента и список метрик целей. На выходе получается структура, представляющая собой оптимизированное дерево поведения с подсказками.

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

Список знаний об окружении определяется для каждого агента и представляет собой класс с полями, содержащими необходимые для поведения переменные окружения. Обобщенные классы знаний о поведении типизируются соответствующим агенту классом знаний об окружении. Таким образом, для переиспользования примитивов поведения несколькими агентами достаточно, чтобы их классы знаний об окружении реализовывали общий интерфейс, который и будет использоваться в классе поведения (рис. 2).

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


Рис. 2. Диаграмма классов знаний об окружении и поведенческих примитивов

 

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

Результат работы генератора – экземпляр класса дерева поведения с единственным методом выполнения, который выполняет цикл прохода по дереву с последующим исполнением методов поведения.

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

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

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