Документация
English
  • Gem RTS v1. Документация
  • Базовая информация о ресурсах в GEM RTS
    • Расположение локальных файлов игры и профиля игрока
    • Архитектура ресурсов игры
      • Пакеты
      • Структура файлов в Пакетах
    • Общая информация о конфигурационных файлах
      • Инструкция include
      • Инструкция define
      • Инструкция mod
  • РАЗРАБОТКА МОДОВ
    • Создание мода
    • Расширенная настройка пакета
    • Создание шаблонов опций
    • Портирование карт из "В тылу врага"
  • РЕДАКТОР
    • Управление камерой в редакторе
    • Горячие клавиши и консольные команды
    • Редактор карт
      • Создание новой карты
      • Редактор сцены
      • Редактор Еntity
      • Редактор ландшафта
        • Редактор высот
        • Редактор полигонов
        • Флаги
        • Редактор типов территорий
        • Редактор материалов земли
        • Редактор цвета
        • Редактор травы
        • Редактор Foliage
      • Редактор воды
      • Создание миникарты
      • Специфика редактирования карт
        • Объекты зданий
        • Объекты Камней
        • Создание складок местности
          • Создание ландшафтного рельефа
          • Объекты обрывов и оврагов
        • Разрушенная техника как антураж карты
        • Объект для озвучивания водных бассейнов
    • Редактор миссий
      • Окно свойств Миссии
      • Редактор Камеры
    • Редактор cпецэффектов
      • Настройка VFX на основе спрайта
      • Настройка VFX на основе декаля
      • Настройка VFX на основе источника света
        • Уровни детализации для локальных источников света
      • VFX на основе генератора частиц
      • Свойства VFX
    • Редактор окружения
      • Общая информация про освещение
      • Создание пресета Environment
      • Настройка Environment
    • Режимы отладки
      • Консольные команды
      • Окно отладки рендера
    • Режим Симуляции
  • НАСТРОЙКИ ИГРОВЫХ ПАРАМЕТРОВ
    • Режимы передвижения юнитов типа human
    • Движение по склонам
    • Настройка бронепробиваемости
      • Алгоритм работы брони
    • Настройка сенсора
    • Модификаторы сложности
    • Пороговое значение для захвата местности
    • Настройка Узла кампании
    • Настройка параметров ветра
    • Metagame
      • Кампании
      • Карты
      • Актеры
      • Юниты
      • Батальоны
      • Факты
      • Счетчики
      • Задачи
      • Page 1
  • АНИМАЦИИ
    • FSM
      • Общие сведения
      • Формат описания FSM
      • Выбор анимации на примерах
      • Выбор анимаций ходьбы и бега
      • Выбор позы
      • Настройка idle
      • Анимации смерти
      • Выбор способа броска гранаты
      • Fsm для юнита Человек
      • Отладка анимаций в редакторе
    • Анимирование объекта placement
    • Звуки и события в анимации
    • Параметры укрытий для аниматоров
  • МОДЕЛИ
    • Плагин для экспорта моделей в игру
    • План настройки моделей техники
      • Создание иерархии элементов модели
        • Корпус
        • Башня
        • Орудие
        • Двигатель
        • Второстепенные кости
        • Трансмиссия
          • Механизмы в шасси
      • Особенности настройки моделей колесной техники
      • Особенности настройки моделей пушек
      • Экспорт модели техники в игру
      • Базовая настройка DEF-файла
      • Тестирование модели техники
      • Назначение материалов на модель
      • Уровни детализации (LOD)
      • Х-модель техники
      • ХХ-модель модели техники
    • Настройка модели дома
      • Описание иерархии структуры модели дома
      • Настройка .def файла модели дома
      • Х-модель дома и его .def файл
      • Тестирование модели дома
  • ТЕКСТУРЫ И МАТЕРИАЛЫ
    • Physically Based Rendering
      • Основные параметры в PBR
      • Компрессия текстур
      • Конверсия текстур в Gem RTS
      • Конверсия текстур с помощью Nvidia Texture Exporter
      • Тестирование материалов
      • Инструменты
    • Текстуры неба
  • ЛОКАЛИЗАЦИЯ
    • Добавление нового языка
    • Переменные строки в локализации
Powered by GitBook
On this page
  • Общие сведения o FSM
  • Компоненты FSM
  • Состояния
  • Теги состояний
  • Запросы от внешних управляющих систем
  • FSM handler
  1. АНИМАЦИИ

FSM

Last updated 1 year ago

Общие сведения o FSM

FSM - это Finite State Machine или конечный автомат (КА). В случае человека или животных КА отвечает за то, чтобы объект адекватно анимировался и не попадал в недопустимые состояния.

Реализация FSM в игре отличается от классического КА. Состояния юнита в игре переключаются по внешним запросам, а не по сигналам, и могут работать длительное время. FSM не используется для управления объектом! FSM является арбитром между противоречивыми запросами от внешних систем управления

Каждому состоянию соответствует свой набор анимаций.

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

Компоненты FSM

Состояния

Состояния формируют граф. Каждому состоянию соответствует набор анимаций. Юнит может находится в каждый конкретный момент времени только в одном состоянии Связи между состояниями задают структуру возможных переходов между состояниями.

Теги состояний

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

Запросы от внешних управляющих систем

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

Виды запросов

Switch

  • делается однократно

  • висит в ожидании своего часа пока не выполнится

  • после выполнения запрос удаляется например, команда "лечь"

Job

  • запрос должен вызываться постоянно (каждый квант)

  • после захода в нужное состояние юнит будет оставаться в этом состоянии, пока запрос не будет прерван более приоритетным запросом или пока запрос не перестанет вызываться

  • если запрос не вызывался из кода более чем duration квантов, то он автоматически удаляется

  • если при отмене запроса он находится в нужном состоянии, то запустится switch запрос прописанный в exit, например, ремонт техники

Action

  • запрос должен вызываться постоянно (каждый квант)

  • если не вызывался хотя бы 1 квант - сбрасывается

  • сразу после срабатывания автоматически сбрасывается

  • как только запрос сработал - значит что мы в нужном состоянии и можно выполнить необходимую операцию, например, бросок гранаты

State

  • запрос вызывается один раз

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

FSM handler

  • Запускает анимации в коде.

  • Ведет список запущенных анимаций, чтобы знать когда анимация закончилась или остановить её при экстренном переходе на другое состояние.

  • Может запускать скрипты или информировать верхний уровень об изменениях в состоянии (например, что оружие уже взято в руки или солдат наконец принял нужную позу в укрытии).

FSM handler вызывается 2 раза для каждого состояния: 1) на входе в состояние - запускаются анимации 2) при выходе из состояния - останавливаются запущенные в этом состоянии анимации

Подмножества в FSM handler

Код выбирает в fsm handler нужное fsm подмножество, в зависимости от состояния юнита Подмножество определяет какие состояния доступны в графе, а какие нет. Например, юнит с канистрой в руках не сможет лежать, сидеть и ремонтировать, поэтому эти состояния будут недоступны.

Не прописывайте анимации в коде. Используйте запросы в animation selector, чтобы была возможность добавлять новые анимации из настроечных файлов, не трогая код.

Для каждого объекта лучше иметь свой специфический fsm handler, если только объекты не являются однотипными и всё их различие только в анимациях.

Конечный автомат — Википедия