ym88659208ym87991671
Импакт-система | Документация для разработчиков

Импакт-система

Обновлено 27 ноября 2025

Импакт-система — это мощный инструмент для создания логики без необходимости написания кода. Система разработана для того, чтобы разработчики могли легко создавать сложные взаимодействия между объектами, используя визуальные компоненты в редакторе Unity. В основе системы лежит компонент Reaction, который позволяет комбинировать различные логические блоки для создания гибкой и модульной игровой логики.

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

Основные компоненты системы

Reaction

Компонент Reaction — это основной узел системы. Он представляет собой контейнер, который объединяет два основных типа логических блоков:

  • Источник событий (Event Sources) — отслеживает изменения в сцене и запускает логику. Например, это может быть вход объекта в зону, нажатие клавиши или изменение переменной.
  • Действие (Actions) — выполняет конкретные изменения в сцене, такие как запуск анимации, изменение состояния объекта, уничтожение объекта и т.д.

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

Variables

Для хранения состояния и организации сложной логики в системе используются переменные с целыми числами. Переменные хранятся в специальном объекте Variables Container, который представляет собой Scriptable Object. Это позволяет легко управлять состоянием сцены и передавать данные между различными компонентами.

State Machine

Компонент позволяет реализовать логику перехода из состояния в состояние. Есть возможность определить состояние источника, из которого будет осуществлен переход, состояние-цель — в которое будет осуществлен переход и условия перехода в целевое состояние. Также есть возможность указать начальное состояние, которое система примет в момент инициализации.

Сетевые компоненты

NetworkVariableSource

Компонент является источником изменения сетевой переменной. Во время вызова метода OnEnable происходит подписка под сетевое событие изменения указанной переменной. Во время вызова метода OnDisable происходит отписка от сетевого события указанной переменной. Значения, на которые будут вызываться реакции системы, можно задать в компоненте условия.

NetworkVariableCondition

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

NetworkVariableAction

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

Источники событий (Event Sources)

GlobalEventSource

Реагирует на глобальные события. Это мощный инструмент для связи различных частей игры. Например, можно отправить событие «Игра началась», и все объекты, подписанные на это событие, начнут свою логику.

AreaEntitySource

Этот компонент импакт-системы позволяет подсчитать количество объектов в определенном объеме. Всякий раз, когда количество этих объектов меняется, компонент сигнализирует об этом. Чтобы отличать целевые объекты от случайных, они маркируются тегом, например, Player. В компоненте можно настроить объем, в рамках которого происходит «сканирование» таких объектов, а также частоту, с которой это сканирование выполняется.

Настройка компонента

  • В поле Area помещается Box Collider объема.
  • В поле Tag прописывается тег объектов, число которых нужно будет синхронизировать.
  • В поле Check Period Sec прописывается частота, с которой будет проводиться синхронизация. Например, 0.25 означает 4 раза в секунду.

KeyboardEventSource

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

ObjectStateChangeSource

Реагирует на изменения состояния объекта, такие как создание, активация, деактивация или уничтожение. Например, можно запустить анимацию при создании объекта.

TimerSource

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

VariableChangedSource

Реагирует на изменение значения переменной. Это позволяет создавать логику, которая зависит от состояния сцены, например, обновление интерфейса при изменении счета.

CollisionSource

Компонент является источником сообщений о коллизиях объектов сцены. Под коллизией понимается появление в системе события OnCollisionEnter, OnCollisionStay. Под завершением коллизии понимается событие OnCollisionExit. В компоненте имеется возможность задать тип коллизии, а также указать на какие объекты будет распространяться источник — отфильтровать их.

TriggerSource

Компонент является источником триггерных сообщений. По своим возможностям и поведению аналогичен компоненту CollisionSource, за исключением того, что события, возникающие в системе, описываются как OnTriggerEnter, OnTriggerStay и OnTriggerExit.

UIButtonPressSource

Компонент предоставляет способ получения событий нажатия на кнопку Button. В инспекторе есть возможность указать кнопку, нажатие на которую будет запускать указанные в реакции действия.

Условия (Conditions)

TransformUpdateCondition

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

VariableExpressionCondition

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

CheckGameObjectStateCondition

Проверяет, активен ли объект. Это полезно для создания логики, которая работает только с активными объектами.

CheckVariableCondition

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

MachineInStateCondition

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

PlayOnceCondition

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

Действия (Actions)

PlayAudioAction

Позволяет запускать звук как реакцию на различные события. Звук задается через аудиоклип и источник звука. Имеется возможность запускать звук со следующими опциями:

  • последовательный или случайный запуск звука из контейнера по событию;
  • зацикливание проигрывания звуков в контейнере;
  • fade in/fade out — запуск звука с плавным повышением громкости при старте и плавным затуханием громкости при остановке;
  • volume from/volume to — можно задать диапазон для случайных значений громкости при каждом вызове звука по событию;
  • pitch from/pitch to — можно задать диапазон для случайных значений тона при каждом вызове звука по событию.

StopAudioAction

Позволяет останавливать звук при различных событиях.

SetTextAction

Отображает значение переменной в текстовом поле. Это полезно для отображения счета или времени.

ChangeComponentStateAction

Позволяет переключить состояние указанного компонента либо в enabled, либо в disabled.

ControlParticleEffectAction

Позволяет управлять поведением системы частиц. Можно либо включить эмиссию частиц, либо отключить ее.

SetIndicatorAction

Отображает индикатор на основе значения переменной. Например, можно отображать количество жизней игрока в виде пирамидки.

DataToContainerAction

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

DataToTextAction

Позволяет вывести значение указанной в событии переменной в текстовое поле. Текстовое поле задается через сериализуемую ссылку в инспекторе объектов.

SendLimitVariableAction

Позволяет осуществить поиск максимальной или минимальной величины в контейнере переменных. Если такая величина найдена, отправляется событие успеха, указанное в компоненте. Если нет — отправляется аналогичное сообщение о неудачном завершении операции.

SetParentAction

Позволяет установить родительский элемент в иерархии для текущего объекта.

ChangeGameObjectStateAction

Включает или выключает объект. Это простое действие, которое позволяет управлять видимостью и активностью объектов.

DestroyAction

Уничтожает объект. Можно задать задержку перед уничтожением, чтобы успеть проиграть анимацию.

PositionByVariableAction

Позволяет поменять позицию для объекта, на основании значения переменной, имя которой задано через параметры компонента. Имеется возможность задать направление сдвига.

SetPositionAction

Изменяет позицию и вращение объекта. Можно также применить физическую силу к объекту.

SwitchRandomObjectAction

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

AddForceAction

Позволяет приложить силу к заданному объекту. Есть возможность указать величину силы и радиуса.

CallUnityEventAction

Отправляет UnityEvent. Это действие позволяет интегрировать логику Impact System с другими системами в Unity.

ChangeVariableAction

Изменяет значение переменной. Это действие можно использовать для увеличения или уменьшения значений, например, для подсчета очков.

DebugMessageAction

Отправляет сообщение в лог для отладки. Это полезно для проверки работы логики во время разработки.

DelayedAction

Позволяет отложить выполнение реакций, заданных в инспекторе, на определенное время.

LoopAction

Позволяет выполнить последовательность реакций, заданных в инспекторе, несколько раз подряд в рамках обработки одного сообщения.

PlayOnceAction

Позволяет выполнить последовательность реакций, заданных в инспекторе, несколько раз подряд в рамках разных событий.

SendGlobalEventAction

Отправляет глобальное событие. Это действие позволяет связывать различные части игры.

ShufflePositionAction

Позволяет переместить указанный в инспекторе объект в случайную позицию внутри заданного объема.

ChangeAnimatorStateAction

Изменяет состояние аниматора. Поддерживает параметры типа bool, int, float и триггеры.

LegacyAnimationPlayAction

Позволяет запустить анимацию, созданную как Animation.

FireAction

Позволяет инстанцировать объект и задать ему ускорение.

SpawnAction

Создает объект на сцене.

SpawnRandomAction

Случайным образом размещает объекты на сцене. Это полезно для создания случайных бонусов или препятствий.

Отладка

При работе с системой бывает не всегда очевидно, почему тот или иной сценарий не отрабатывает как нужно. В целях отладки в систему интегрирован модуль логирования, который позволяет отследить значение переменной в конкретный момент времени, а также оценить, почему то или иное условие не отработало как нужно. Для того, чтобы включить модуль логирования в работу системы, нужно определить ряд компонентов, подлежащих отладке. Перевести нужный компонент (reaction) в режим отладки можно при помощи поля Debug Flags в инспекторе компонента Reaction. В списке Debug Flags можно выбрать следующие значения:

  • Default — работа модуля без отладки;
  • Comment — при работе модуля будет выведен комментарий автора;
  • ShowAddAction — позволяет рекурсивно выводить список кастомных компонентов;
  • Log — позволяет логировать работу компонента.

Импакт-система — это гибкий и мощный инструмент для создания логики без необходимости написания кода. Позволяет быстро прототипировать идеи, создавать сложные взаимодействия и управлять игровыми событиями. Благодаря модульной структуре и возможности расширения, система подходит как для небольших проектов, так и для крупных. Используя компоненты, такие как источники событий, условия и действия, вы можете создавать уникальные механики и эффекты, которые сделают вашу сцену более интерактивной и увлекательной.

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей. Вы можете запретить сохранение cookie в настройках своего браузера.