Назначение

Спроектирована для решения следующих задач:

  1. Сборка поведения оружия аватара из компонентов-условий (Conditions) и компонентов-действий (Actions)
  2. Сборка поведения снарядов оружия из основных поддерживаемых типов (Collider, Raycast, Trigger, Particle System).
  3. Настройка прерывания и возобновления работы одних компонентов-условий от событий других.
  4. Расширяемость системы методом добавления пользовательских компонентов условий/действий/снарядов.
  5. Поддержка аддитивного интерфейса оружия, накладываемого поверх основного интерфейса аватара.

Описание

Система вооружения аватара позволяет конструировать поведение оружия и его снарядов из предоставляемого стандартного набора компонентов, а также расширять набор пользовательскими компонентами. Система была спроектирована с учётом возможности динамического изменения арсенала аватара, и поддерживает сценарии смены оружия, использования нескольких единиц оружия одновременно и т.д.

Общая схема работы системы представлена ниже:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c24cede9-9612-49cc-96f8-f42563f96368/Untitled.png

Система предполагает обязательное наличие аватара для функционирования оружия.

Центральным компонентом поведения оружия является AvatarWeaponController. Он подключается к компоненту ввода аватара AvatarOverallInput и выполняет список компонентов-условий и компонентов-действий. Компоненты-условия определяют логику поведения оружия и после выполнения формируют нормализованный сигнал в диапазоне [0,1], который используют компоненты-действия. Компоненты-действия выполняют определённые операции в зависимости от величины входного сигнала. В отличие от компонентов-условий, компоненты-действия не могут повлиять на выполнение друг друга, а также не могут менять сигнал.

Все компоненты-условия наследуются от базового класса WeaponConditionController, а компоненты-действия - от WeaponActionController. Подробная информация представлена в соответствующих разделах.

AvatarWeaponController

Компонент AvatarWeaponController выполняет следующие функции:

  1. Подключение к компоненту ввода аватара AvatarOverallInput.
  2. Выполнение списка компонентов-условий оружия и получение нормализованного сигнала.