Selector - это одна из базовых нод в деревьях поведения. Она представляет собой композитную ноду, которая выполняет своих детей последовательно слева направо до тех пор, пока один из детей не вернет статус Success
, либо пока все дети не вернут статус Failure
.
Нода Selector полезна, когда нужно выполнить действия в порядке приоритетов. Если одно действие не выполнено успешно, Selector переходит к следующему действию в списке.
Выбираем бить скиллом или обычной атакой
Логика такая - проверяем, а можем ли мы атаковать скиллом (он готов, хватает MP и так далее). Если да - бьем скиллом и выходим. Если нет - бьем базовой атакой.
Обратите внимание, что будет выполнена ЛИБО атака скиллом, ЛИБО базовая атака. Т.е. если атака скиллом удастстя успешно, то до Execute Aura(2') дерево даже не дойдет
Ротация скиллов - Selector + Sequence:
А теперь давайте построим уже полноценную ротацию
Что же здесь происходит - для начала, мы используем ноду Sequence(1), которая объединяет еще одну Sequence(2) и Selector(5).
Sequence(2) отвечает за проверки "А можем ли мы вообще бить?", т.е. мы живы и выбрана цель. В реальных примерах сюда еще могут примешиваться проверки HP, нахождения в городе и так далее. Если любая из проверок не выполнится - дерево уйдет на следующий цикл, так и не попытавшись атаковать.
Если же мы живы и у нас есть цель, то дальше нужно выбрать "А как же именно мы будем атаковать выбранную цель?".
Для упрощения здесь всего 2 варианта:
В реальных сценариях сама ротация может быть сильно сложнее - нужно проверять ресурсы(HP/MP/кулдауны), можно проверять приоритетность текущей цели (если мало HP у цели - нет смысла бить сильным скиллом) и т.п.
Success
, то Selector тоже вернет Success
и прекратит выполнение остальных детей.Failure
, то Selector вернет Failure
.Running
, то Selector также вернет Running
и продолжит выполнение с того места, где остановился.Не путайте! Sequence останавливается на первой же ноде, которая вернула Failure, а Selector останавливается на первой ноде, которая вернула Success.