У меня проблемы с реализацией моего дерева поведения. Я думаю, что понимаю основы, но я застрял в запущенных событиях и, в частности, в том, как их остановить (или, скорее, как их не останавливать)
Предположим следующее простое дерево:
Tree
while "talk_to_lady"
sequence
move_to_position
talk
while "dance"
sequence
dance_move_1
dance_move_2
Все узлы в последовательностях являются более длительными действиями и, таким образом, возвращают состояние выполнения до завершения.
Предположим, что танец верен, персонаж танцует, и это нормально. Теперь talk_to_lady имеет значение true, что означает, что персонаж должен пойти туда и поговорить с ней. Хотя эта задача имеет более высокий приоритет, и я действительно хочу, чтобы это произошло, я все же хочу, чтобы персонаж закончил текущий танцевальный узел (т. не хочется ждать).
Мое решение состояло бы в том, чтобы дерево вызывало, скажем, метод Abort() для действия dance_move, но если это возвращает состояние выполнения, оно будет игнорировать действие talk до тех пор, пока действие dance_move не вернет успех или неудачу. Кроме того, если событие с более высоким приоритетом в дереве является другим действием, а не узлом while, возможно, оно уже произвело изменения состояния, которые могут помешать действию dance_move.
Я что-то упустил или есть решение, о котором я не читал?
dance
перед переходом к последовательностиtalk_to_lady
? Или вы спрашиваете, как прервать/продолжить в зависимости от ситуации? - person iamanigeeit   schedule 20.08.2018