Selector - это одна из базовых нод в деревьях поведения. Она представляет собой композитную ноду, которая выполняет своих детей последовательно слева направо до тех пор, пока один из детей не вернет статус Success, либо пока все дети не вернут статус Failure.
Нода Selector полезна, когда нужно выполнить действия в порядке приоритетов. Если одно действие не выполнено успешно, Selector переходит к следующему действию в списке.
Выбираем бить скиллом или обычной атакой
![oxjyg11[1].png](/assets/oxjyg11%5B1%5D.png)
Логика такая - проверяем, а можем ли мы атаковать скиллом (он готов, хватает MP и так далее). Если да - бьем скиллом и выходим. Если нет - бьем базовой атакой.
Обратите внимание, что будет выполнена ЛИБО атака скиллом, ЛИБО базовая атака. Т.е. если атака скиллом удастстя успешно, то до Execute Aura(2') дерево даже не дойдет
Ротация скиллов - Selector + Sequence:
А теперь давайте построим уже полноценную ротацию
![c5do0cg[1].png](/assets/c5do0cg%5B1%5D.png)
Что же здесь происходит - для начала, мы используем ноду 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.
