Ресурсы используемые в Behavior Tree
Отличия Behavior Tree в Unreal Engine
1. Behavior Trees в Unreal Engine являются событийно-ориентированными (event-driven)
2. Условные выражения не являются листьями узлов в дереве
3. Специальная обработка для параллельного поведения
Почему бы не использовать узлы Parallel?
Что использует UE4 вместо узлов Parallel?
Преимущества подхода UE4 к Одновременным Поведениям
Частые вопросы
Руководство по узлам Behavior Tree
Composite - составные узлы
Узел Selector
Узел Sequence
Узел Simple Parallel
Decorator
Blackboard
Compare Blackboard Entries
Composite
Conditional Loop
Cone Check
Cooldown
Does Path Exist
Force Success
Gameplay Tag Condition
Is Blackboard Value of Given Class
Keep in Cone
Loop
Reached Move Goal
Set Tag Cooldown
Tag Cooldown
Time Limit
Узлы Services
Default Focus
Узлы Tasks
Make Noise
Move To
Play Sound
Run Behavior
Run EQS Query
Wait
Wait Blackboard Time
Ресурсы используемые в Behavior Tree
Behavior Tree - Это обработчик искусственного интеллекта. Он принимает решения и действует в зависимости от принятых решений.
Blackboard - Это память искусственного интеллекта. Она хранит значения, которые используются в Behavior Tree, в виде пары ключ-значение.
Отличия Behavior Tree в Unreal Engine
Этот раздел предназначен для тех людей, которые знакомы с Behavior Tree, и хотели бы погрузиться в реализацию Behavior Tree на Unreal Engine 4 как можно быстрее.
Для тех, кто не использовал Behavior Tree раньше, для вас некоторые объяснения будут запутанными.
Есть три важных отличия Behavior Tree в Unreal Engine от стандартных реализаций.
1. Behavior Trees в Unreal Engine являются событийно-ориентированными (event-driven)
Behavior Trees управляемые событиями не выполняют работу каждый кадр. Вместо того, чтобы постоянно проверять, имело ли место соответствующие изменение, Behavior Tree просто пассивно ожидает «события», которое может вызвать изменения в дереве.
Наличие событийно-ориентированной архитектуры, предоставляет возможности улучшения производительности и отладки. Однако, чтобы использовать эти преимущества, вы должны понимать отличия нашей реализации Behavior Trees.
Поскольку код не должен перебирать все дерево каждый кадр, производительность намного лучше! Концептуально, вместо того, чтобы постоянно спрашивать: «Мы идём?», Мы можем просто "отдохнуть" до тех пор, пока мы не получим сигнал "Мы идём!"
2. Условные выражения не являются листьями узлов в дереве
В стандартной модели Behavior Tree, условия являются листьями узлов задач, которые не делают ничего, а только выбирают следующее действия в зависимости от результатов условия. Хотя ничто не мешает вам делать традиционные условия в задачах, но настоятельно рекомендуется в место этого использовать нашу систему декораторов для условий.
Создание условий как декораторов вместо задач, имеет несколько существенных преимуществ.
Во-первых, условные декораторы делают интерфейс дерева более интуитивным и легким для чтения. Так как условия лежат в основе под-дерева, которым они управляют, вы можете сразу увидеть, какая часть дерева "закрыта", если условие не будет выполнено. Кроме того, поскольку все листьями являются действиями задач, это легче увидеть, как фактические действия были упорядочены по дереву. В традиционной модели, условия находятся среди листьев, так что вам придется тратить больше времени на выяснение того, какие листья являются условиями, а какие листья являются действиями.
В этом разделе дерева, декораторы Close Enough и Blackboard могут предотвратить выполнение дочерних узлов последовательности (Sequence).
Еще одним преимуществом условных декораторов является то, что легко сделать эти декораторы выступающими в роли наблюдателей (ожидающих события) на критических узлах в дереве. Эта функция имеет решающее значение для получения полного преимущества от событийного характера деревьев.
3. Специальная обработка для параллельного поведения
Стандартные деревья поведения часто используют составной узел - Parallel, для обработки параллельных поведений. Параллельный узел начинает выполнение всех своих дочерних узлов одновременно. Специальные правила определяют, как действовать, если один или несколько из этих дочерних узлов завершает работу.

Параллельные узлы не обязательно многопоточны (когда задачи выполняются действительно в одно и тоже время). Это просто способ концептуально выполнять несколько задач одновременно. Часто они работают на том же самом потоке и начинают работу последовательно. Эта последовательность не имеет значения, так как всё будет происходить в том же самом кадре, но это иногда важно.
Вместо сложных параллельных узлов, деревья UE4 используют простые параллельные, Simple Parallel, узлы и наш собственный тип специального узла, который мы называем Service - служба, для достижения тех же видов поведения.
Почему бы не использовать узлы Parallel?
- Параллельные узлы могут быть очень запутанными, даже для относительно простых форм поведения.
Фактически параллельные узлы это когда одновременно работает куча отдельных под-деревьев, но некоторые, или все, из этих под-деревьев, возможно, придется прервать, когда одно из них завершается неудачно или успешно, когда другие завершились (успешно или неудачно). Параллельные формы поведения могут сбивать с толку даже в простых случаях, и даже с некоторым количеством настроек которые потенциально доступны, это весьма запутанно. - Параллельные узлы более трудны для оптимизации, особенно с точки зрения создания управляемых событиями деревьев.
Что использует UE4 вместо узлов Parallel?
Есть три типа узлов которые вы можете использовать для реализации функциональности узлов Parallel:
Узел Simple Parallel
Узлы Simple Parallel позволяют иметь только два дочерних узла: один узел должен быть узлом одной задачи, а второй может представлять собой поддерево.
Вы можете думать о ходе выполнения узла Simple Parallel в таком виде: «Пока выполняется задача A, делать B». Например, «Пока атакуем противника, двигаться в его направлении». То есть A - это основная задача, а B - это вторичная задача или некие действия которые выполняются пока выполняется задача A.
Хотя есть некоторые варианты того, как обрабатывается выполнение задачи B, узел является относительно простым в концепции по сравнению с традиционными параллельными узлами. Тем не менее, он поддерживает большую часть наиболее распространенных в использовании параллельных узлов.
Узлы Simple Parallel позволяют легко использовать некоторые событийно-ориентированные оптимизации. Узлы Full Parallel были бы гораздо более сложными для оптимизации.
Узлы Services
Службы (Services) - с это специальные узлы которые связаны с любым составным узлом (Selector (Селектор), Sequence (Последовательность), или Simple Parallel (Простой параллельный узел)), которые могут регистрироваться для обратного вызовы каждые X секунд и выполнять определенные задачи которые должны возникать периодически.
Например, служба может определить кого из противников следует выбрать для преследования в то время пока дерево поведения двигает персонажа к текущему противнику.
Службы активны только до тех пор, как выполнение остается в поддереве композитного узла, с которым служба связана.
Декоратор свойства "Observer Aborts"
Один общий случай использования для стандартных параллельных узлов - постоянно проверять условия, при которых задача может прервать выполнение, если требуемые условия не соблюдаются. Например, если у вас есть кошка, которая выполняет последовательность, такую как "Вилять телом" и затем "Атаковать", вы можете прекратить его выполнение, если мышь убегает в нору. С параллельными узлами, вы бы имели дочерний узел, который проверяет, можно ли наброситься на мышь, а затем еще один дочерний узел - это последовательность для выполнения. Так как наше поведение управляется событиями, мы вместо того, чтобы следить за условиями, имеем условные декораторы которые наблюдают за значениями и при необходимости прерывают выполнение.
Преимущества подхода UE4 к Одновременным Поведениям
- Ясность
Использование Services и Simple Parallel создаёт простые деревья которые легки для понимания. - Лёгкость отладки
Более четкие графики легче для отладки. Кроме того, наличие меньшего количества одновременных путей выполнения является огромным плюсом при просмотре того, что на самом деле происходит на графике. - Лёгкая оптимизация
Событийно-ориентированные графы легко оптимизировать, если они не имеют множества под-деревьев, которые выполняются одновременно.
Частые вопросы
"Можете ли вы действительно делать всё то, что вы могли бы делать с использованием узлов Parallel?"
Мы считаем, что вы можете сделать все необходимое с узлами которые мы предоставляем, с лучшим интерфейсом. Конечно эти узлы узлы обрабатывают наиболее распространенные случаи. Если мы видим что в каких-либо случаях нечто не может быть сделано или менее, идеально, мы рассмотрим дополнительные исправления для обработки этих случаев.
"Это только различия между Behavior Trees из Unreal и стандартом Behavior Trees"
"Стандарт" в кавычках. В действительности нет такого понятия, как "стандарт" для Behavior Tree, так что может быть любое количество различий между реализацией UE4 и независимой реализацией с которой вы знакомы. Если вы знакомы с необычной реализацией, она может иметь другие важные различия, и вероятно есть более тонкие различия. Надеемся, что эти заметки дают вам представление о наиболее важных отличиях касающихся того, как как вам нужно будет строить свои деревья. Для получения более подробной информации о наших специальных типах узлов, читайте разделы об этих узлах.
Страницы:
1 2 3 4 Следующая »
#ИИ, #Behavior tree, #Unreal
30 сентября 2016
(Обновление: 1 июня 2020)
Комментарии [14]