Что это: пошаговая настройка автомата через StateMachineData (ScriptableObject), предикаты переходов и компонент StateMachineBehaviour. Логика (состояния, переходы) — в SO; ссылки на объекты сцены для условий задаются в компоненте (Context for conditions).
Как использовать: см. шаги ниже: компонент на сцене → настройки компонента → создание StateMachineData → состояния и переходы.
Важно: ScriptableObject не может хранить ссылки на объекты сцены — поэтому в SO настраивают только логику (состояния, переходы, какое свойство проверять), а какой GameObject читать задаётся на компоненте в сцене (раздел Context for conditions).
То же правило действует для действий (StateAction): SO хранит только тип действия и слот контекста. Для включения/выключения сценового объекта используйте SetContextGameObjectActiveAction с Context Slot = Owner / Override1..5. Старый SetGameObjectActiveAction с прямым GameObject target оставлен только для совместимости старых ассетов.
- Выберите GameObject (например, персонажа).
- Добавьте компонент: Component -> Neoxider -> Tools -> State Machine Behaviour.
- В
ReferencesукажитеStateMachineData.
State Machine Data— ссылка на конфигурацию (SO).- Context for conditions — массив GameObjects сцены для условий переходов. Элемент 0 = слот Override1, элемент 1 = Override2, … (до 5). Ссылки на сцену задаются только здесь, не в SO.
Auto Evaluate Transitions— автоматическая проверка переходов каждый кадр.Show State In Insp— отображение текущего состояния в инспекторе.Enable Debug Log— логирование переходов.Exit Current State On Disable— при выключении компонента вызватьOnExitтекущего состояния и очистить current state.Reload Data On Enable— при повторном включении компонента перезагрузитьStateMachineData.
Секция Events:
On InitializedOn State EnteredOn State ExitedOn State Changed(from,to)On Transition Evaluated(transitionName,result)
Секция Controls:
Reload DataEvaluate NowGo To Initial StateChange State(ручной выбор state из списка)
Выберите ассет StateMachineData и настройте:
- Добавьте элементы списка.
- В каждый элемент назначьте
StateData. - В
StateDataнастройтеOn Enter,On Update,On Exitдействия.
- Укажите стартовый
StateData.
- Добавьте переходы кнопкой
Add Transition. - Для каждого перехода заполните:
NameFrom StateTo StatePriorityIs Enabled
- Нажмите
Edit Conditionsдля настройки условий.
Условия определяют, когда переход из одного состояния в другое разрешён. Без условий переход считается всегда доступным (срабатывает первым по приоритету).
- В ассете
StateMachineDataу нужного перехода нажмите Edit Conditions. - В окне Edit Transition нажмите Add Condition → Neoxider/Condition Entry.
- Настройте предикат только данными из SO:
- Context Slot — с какого объекта читать: Owner = объект с
StateMachineBehaviour; Override1 … Override5 = элементы из списка Context for conditions на компоненте в сцене (индексы 0…4). В SO хранится только номер слота, не ссылка на сцену. - Condition Entry — как в NeoCondition: Source Object оставьте пустым (будет использован контекст из слота), выберите Component и Property, оператор и порог.
- Context Slot — с какого объекта читать: Owner = объект с
Ссылки на объекты сцены задаются на компоненте в инспекторе: раздел Context for conditions — перетащите туда нужные GameObjects (например, игрок, враг, точка). В условиях в SO выберите Override1, Override2 и т.д., чтобы использовать эти объекты.
Все условия перехода объединяются по логике И (AND).
ConditionEntry может читать свойства компонента StateMachineBehaviourBase:
CurrentStateName(string)PreviousStateName(string)CurrentStateElapsedTime(float)StateChangeCount(int)HasCurrentState(bool)
Пример (в Condition Entry в SO):
- Context Slot = Owner
- Source Object = пусто
- Source Mode = Component, Component = StateMachineBehaviourBase, Property = CurrentStateName
- Compare = Equal, Threshold String = "Run"
- Context Slot = Owner — читаем с объекта, на котором висит StateMachine. Для другого объекта: в сцене в Context for conditions на компоненте добавьте этот объект и выберите в условии Override1 (или Override2, … по индексу).
- В Condition Entry оставьте Source Object пустым — контекст возьмётся из слота. Заполните только Component, Property, Compare и порог.
- Убедитесь, что From State и To State у перехода совпадают с состояниями в списке States.
- Включите Enable Debug Log и смотрите консоль; On Transition Evaluated показывает результат проверки перехода.
- Если логирование выключено, StateMachine не пишет runtime warning/log/error в консоль; используйте
On Transition Evaluatedи Events для UI/инструментов.
idleиrun— дваStateData.- Переход
idle -> run: условиеSpeed > 0. - Переход
run -> idle: условиеSpeed <= 0. Auto Evaluate Transitions = ON.
| Что сделать | Где |
|---|---|
| Повесить автомат на объект | StateMachineBehaviour |
| Указать конфигурацию | References -> State Machine Data |
| Включить авто-переходы | Settings -> Auto Evaluate Transitions |
| Настроить состояния | StateMachineData -> States |
| Настроить переходы | StateMachineData -> Transitions |
| Настроить условия | У перехода нажать Edit Conditions → Add Condition → Neoxider Condition |
| С какого объекта читать условие | Context Slot в условии (Owner / Override1..5); объекты для Override — в Context for conditions на компоненте в сцене |
| Подписаться на события | StateMachineBehaviour -> Events |
| Ручная отладка | StateMachineBehaviour -> Controls (в Play Mode) |