Дмитрий Назаров

Дмитрий Назаров 

GameDev

21subscribers

166posts

Showcase and bundles

4
A bundle is a collection, compilation, playlist, or catalog of posts that saves you from searching through the blog and lets you buy the entire content series in a single click.
goals2
3 of 100 paid subscribers
Так я смогу понять, что канал кому-то интересен и у меня будет мотивация делаться контентом!
$0 of $6 280 raised
Смогу ГОД разрабатывать игру фултайм, стримить, записывать ролики без отвлечения на наемную работу.

Перехожу на State Tree

Статья для тех, кто познакомился со State Tree по overview урокам и имеет общее представление о том, как работает данный инструмент. Т.к. об общих принципах я тут рассказывать не буду.
Примечание: Эта публикация не для тех кто привык писать что-то вроде "иди читай документацию". Ребята, вам не сюда! Документации мало, разъяснения не понятны, а видео-уроки по State Tree базовые и не открывают всего функционала.
Кратко: State Tree - это свежий инструмент для создания различных деревьев состояний и переключения между ними.
Я три недели изучаю данный инструмент (в свободное от основной работы время). За этот период, уверен, порвал ни один пучок нервов, произнес ни один десяток матерных слов... ну и, конечно, же потратил кучу времени на то чтобы разобраться и создать что-то рабочее через State Tree.
Странные условия запуска
У задач для StateTree есть свои условия для запуска: в начале State, по завершению State, на тике и т.п. И тут надо помнить, что задачи State все сразу запускаются. ВСЕ! СРАЗУ! Казалось бы это в каждом видео по State Tree говорят, но я лично не уловил и думал, если их по порядку выставить, то и работать они будут друг за другом.
И тут меня были проблемы т.к. например, сначала, персонаж должен получить точку на карте, затем идти к ней... И вот ты запускаешь симуляцию чтобы проверить как работает логика, а у тебя ничего не происходит. А следующий раз запускаешь  - и все работает. И ты думаешь: это я - дурак или лыжи не едут?
Да, у State Tree есть такой вот переключатель слева от раздела задач:
Но он не решает этой проблемы.
Режим All предусматривает что все задачи должны быть выполнены прежде чем завершиться текущий State и задача перейдет к Transitions.
Режим Any предусматривает, что если любая задача завершиться, то сразу совершиться переход к Transitions
Примечание: Transitions - это условия выхода из состояния. Т.е. причины по которым State должен быть завершен.
ВЫВОД: Учитывая эту особенность рекомендую под каждую последовательность задач делать последовательные Stat'ы, а в один State класть только те задачи которым позволено запускаться одновременно.
Глобальные задачи
Global Tasks (глобальные задачи) - это задачи, которые запускаются при старте State Tree. Т.е. перед прочей логикой. Удобная, казалось бы, штука, когда надо что-то инициализировать прежде чем запустить основную логику.
Но есть нюанс. В любой глобальной или обычной задаче есть необходимость завершения чтобы перейти к следующей задаче. Для этого используется нода Finish Task.
Дак вот глобальные задачи НЕ ДОЛЖНЫ иметь данной ноды. Если глобальная задача имеет Finish Task то задача закрывается (не важно с каким исходом) и ставит "в ступор" всю State Tree.
Поначалу я практически отказался от GlobalTasks и назвал идею их внедрения "хуйней" когда подключил туда обычные задачи и сломал все свое дерево.
И ни в одном видео в интернете вам этого не расскажут :(.
Сейчас я использую их но есть вопросы и нужно умудряться чтобы полнофункционально использовать Global Tasks. Ведь если нет Finish Task, то не ясно в какой момент времени State Tree получит данные из нее. А если к тому времени уже запуститься основной поток задач в дереве и данные не будут получены... Странная 
ВЫВОД: Делайте для глобальных задач обычные задачи, но без Finish Task.
Что по итогу?
Сотрудники Epic Games в одном из выпусков Insight или еще какой-то трансляции показывали как можно использовать State Tree для создания AI на примере RTS. Ребята - разработчики игры восхваляли State Tree и не могли найти подходящих слов, как им сейчас круто после того, как они перешли с Behavior Tree на State Tree: мол все удобно, можно запускать любой State из любого места, никаких blackboard и все такое... 

Я посмотрел это выступление и поставил "плюсик" напротив State Tree когда делал выбор между ним и Behavior Tree. Но сейчас спустя время я понимаю что не все так "круто!", как они описывали. Я с 90% вероятность могу сказать, что это лишь очередная маркетинговая презентация коих от Эпиков было очень много: мы помним и мегалайты и наниты и чудеса люмена. И мы все знаем, как хреново они все работают без танцев с бубном!
На мой взгляд State Tree - это крайне сырой продукт.
- В нем нет ни адекватного режима отладки, как в BT, где, к слову можно посмотреть на какой ветке в данный момент остановился tick.
- Задачи работают через раз.
- С синхронизацией, последовательностью передачи данных огромные проблемы и это ни как нельзя отследить.
- Глобальные задачи на первый взгляд вообще не понятно как работают. Лично когда я пытался делать простую глобальную задачу с поиском ближайшей случайной точки на карте, то State Tree попросту не работало. Ни как. Я не удивлен что в видеоуроках на Youtube демонстрируются лишь базовые особенности State Tree о которых вскользь рассказывали сами Epic Games.
Я не собираюсь бросать свою работу на State Tree.
Я решил полностью перенести всю логику профессий (12 больших деревьев поведения) и боевую систему на State Tree.
И работать с ними далее. Если, конечно, производительность будет более оптимистичной чем при работе на Behavior Tree.
Сейчас я переношу дерево стражника/охранника/защитника. Скоро напишу о подробностях работы.
P.S. Отлеживайте и подписывайтесь на блог - будем на связи!
Subscription levels2

Геймер

$1.26 per month
Подпишись и получай на 50% больше контента по разработке игры.

Разработчик

$3.2 per month
- Подпишись и получай на 100% больше информации и опыта разработчика.
- Детали из процесса разработки механик и дизайнерских решений.
- Полезные лайфхаки для разработчика
Go up