Войти
Unreal EngineФорумОбщее

Настройка Behavior Tree

#0
20:52, 29 янв 2022

Пишу искуственный интеллект противника, суть такова: character определяет случайную точку на карте (таск) → движется к этой точке (move to) → стреляет в игрока (task). Система зациклена, так что после выстрела противник снова выбирает точку, движется к ней, стреляет и так далее.
Проблема в том, что я не знаю какой стоит выбрать composite для такой последовательности. Пробовал sequence, но после выполнения выстрела логика останавливается вне зависимости от результата выстрела (success или fail). При использовании Selector выстрел не происходит, так как move to выдает success.

#1
22:38, 29 янв 2022

Как всегда, нужен скриншот дерева)
Еще у БТ иногда случается такой баг что логика прекращает работать, фиксится вставкой между рутом и первым композитом  еще один любой (кроме параллельного).
В итоге, попробуйте собрать схему: root->selector/sequence->sequence(в нем таск с поиском точки, затем мувту, затем таск со стрельбой)

Таск выстрела точно вызывает finish execution? Скрин таска стрельбы тоже добавьте

#2
23:47, 29 янв 2022

R1pp3R
Мне казалось, что я достаточно четко обрисовал структуру behavior tree, но раз нужен скриншот, то вот он:

+ Показать

Скрин таска по стрельбе:

+ Показать

Сейчас галочка не стоит и поэтому выполняется fail, но установка галочки ничего не меняет.

#3
0:29, 30 янв 2022

Странно. У меня несколько таких же сиквенсов и все нормально работают.

+ Показать

Видимо, проблема в функции Shoot. Попробуй там вместо каста и функции просто печатать что-нибудь. Интересно, тоже будет стопать или нет.

TommYMoonlight
> логика останавливается вне зависимости от результата
Вообще BehaviorTree перестает работать? Эта визуализация с выбранной желтым текущей веткой тоже не работает?

#4
1:00, 30 янв 2022

попробуйте между Root и Sequence добавить еще один Sequence (у БТ есть один баг - вполне возможно, что вы на него и наткнулись)

#5
1:01, 30 янв 2022

TommYMoonlight
> Сейчас галочка не стоит и поэтому выполняется fail, но установка галочки ничего
> не меняет.
галочка нужна будет, если этот таск вызывается из композитора Sequence, и за ним следует еще какая-то логика

#6
1:03, 30 янв 2022

Пока ты Success в Shoot не выставишь в TRUE, задача считается не выполненной и не может перейти к следующей задаче.
Это нужно для того, чтобы перезапускать задачу (самому или согласно твоей логике), в случае её не успеха.
То есть пока MoveTo например не вернёт Success (что мы дошли), выстрел не будет произведён.

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

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

#7
12:03, 30 янв 2022

Сейчас понял, в чем проблема - у вас в таске стрельбы каст проваливается, соответственно, ни shoot ни finish execution не выполняются. Owner actor, скорей всего, возвращает ссылку на контроллер, а не на пешку (точно не помню), так что вам оттуда надо вытянуть ноду GetControlledPawn и ее к касту подключить.

П.с. когда работаете с behavior tree обрабатывайте все возможные исключения - cast failed тоже подключите к финишу, только с false результатом. Когда оставляете такие щели - это в 100% случаев аукнется

П.п.с. receive execution ai дает доступ и к контроллеруи к пешке - советую им воспользоваться вместо getControlledPawn

#8
12:09, 30 янв 2022

R1pp3R
> у вас в таске стрельбы каст проваливается, соответственно, ни shoot ни finish
> execution не выполняются
Это самый очевидный вариант, но
TommYMoonlight
> после выполнения выстрела логика останавливается
По какой-то причине выстрел происходит.
Что может остановить BT после выстрела вообще не понятно. Может ничего и не останавливается. Надо подождать автора.

#9
13:38, 30 янв 2022

TommYMoonlight
> Пишу искуственный интеллект противника, суть такова: character определяет
> случайную точку на карте (таск) → движется к этой точке (move to) → стреляет в
> игрока (task). Система зациклена, так что после выстрела противник снова
> выбирает точку, движется к ней, стреляет и так далее.
> Проблема в том, что я не знаю какой стоит выбрать composite для такой
> последовательности. Пробовал sequence, но после выполнения выстрела логика
> останавливается вне зависимости от результата выстрела (success или fail). При
> использовании Selector выстрел не происходит, так как move to выдает success.

FinishWithResult = Succeeded (в качестве последнего нода) в сиквенсе возвращает управление в начало сиквенса.
FinishWithResult = Failed в сиквенсе прерывает управление и возвращает его на более высокий уровень.
Сделай Select на более высоком уровне для нескольких задач. Например отдельно патрулирование и отдельно для того, что у тебя. И будет тебе счастье. У тебя в дереве нет выбора, поэтому по любому управление возвращается в начало цикла. Просто ты не оставил своему дереву выбора ИМХО.
Это как в тюремной камере:
-Вам не понравилось в камере? - Тогда выходите.
-Дверь закрыта? -Тогда выполните пункт 1...

#10
13:38, 30 янв 2022

Спасибо всем за помощь, проблема решена!
Отдельное спасибо R1pp3R, так как именно ваши советы помогли мне решить проблему.
Дерево построил таким образом:

+ Показать

С прежней структурой таск выстрела срабатывал, но сам выстрел не происходил, при этом при подключении в таск выстрела вместо самого выстрела Print String текст выводился. Решил данную проблему также по совету R1pp3R с помощью вытягивания GetControlledPawn и подключения ее к касту, получилась такая система:

+ Показать
#11
14:02, 30 янв 2022

В догонку. Мне недавно знакомы твои проблеммы. Если твоё дерево снова не сработает, то
https://youtu.be/e3jiTksusP0
не надо впадать в отчаяние.
просто сделай Build->Build Paths

#12
14:08, 30 янв 2022

ivashko
> просто сделай Build->Build Paths
Спасибо, возьму на заметку.

#13
14:26, 30 янв 2022

TommYMoonlight
Я на bt собаку съел)
Попробуйте после рута убрать тот селектор. Если юудет так же нормально работать - так и оставляйте

Unreal EngineФорумОбщее

Тема в архиве.