Найти тему
alkihuri

Простеший конечный автомат в Unity

Оглавление

Зачастую университетские преподователи математики любят грузить студентов сложными определениями, обвешивая математику какойто ширмой недоступности.

На самом деле, мои хорошие математика - очень проста и красива.

Что-то на сложном (рис. 1)
Что-то на сложном (рис. 1)

Студенты технчиеских шараг университетов могут вспомнить, так называемую теорию "Конечных автоматов" или "Finite-state machine".

Все это абстрактное великолепие зачастую измазано ужасом и сложностью.

На самом деле с конечными автоматами мы знакомы с детсва. Для того, чтобы разобраться что это за "автоматы", разберем жизнь типичного офисного планктона клерка:

Веселая жизнь (рис. 2)
Веселая жизнь (рис. 2)

Все сразу стало на свои места, согласитесь.

И конечный автомат уже не такой сложный и буквы вроде не эльфийские.

Причем тут Unity?

Если вы хотите войти в GameDev, то математика вам просто необходима. Теория конечных автоматов нужна в любой игре для:

  1. Запуска последовательности анимаций для персонажа. Настроите не верно персонаж будет прыгать, когда не нужно.
  2. Опредления состояния игры, т.е. запуск игры, конец игры и т.п.
  3. Для всяких костыльных хендлеров запрсоов из ваших бекенд штучек

Пример

Допустим у нас есть персонаж Саид :

Саид (рис. 3)
Саид (рис. 3)

Саид может находится в 3-х состояниях:

  1. Ожидание
  2. Бег
  3. Прыжок
Описание состояний персонажа Саида (аним. 1)
Описание состояний персонажа Саида (аним. 1)

Разумеется надо усложнить автомат наличием условий перехода, иначе ведь совсем не похоже на игру :

Базовый конечный автомат для  игры (рис. 4)
Базовый конечный автомат для игры (рис. 4)

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

Хендлер для состояний персонажа на C# (рис. 5)
Хендлер для состояний персонажа на C# (рис. 5)

Разумеется само по себе это дело не заведется. Пишем связующий контроллер для самого персонажа:

Оставляем ссылку на класс обработки аниматора (рис. 6)
Оставляем ссылку на класс обработки аниматора (рис. 6)
Говнокод (рис. 6)
Говнокод (рис. 6)

Пример использования конечного автомата в готовой ну почти игре:

Конечные автоматы йееее (аним. 2)
Конечные автоматы йееее (аним. 2)

В след статье разберу как использовать конечные автоматы в C# для опредления состояния игры.

Mark Alkihuri 20/10/2020