```csharp
// Инициализируем машину состояний
var state = new StateSwitcher<EState>(EState.Staying);
// Если юнит остановился, то обрабатываем ситуацию (код выполнится один раз)
state.SetHandler(EState.Staying, () =>
{
// Некий код
});
// Можно подписаться на переход с одного состояния на другое (код выполнится один раз)
state.SetHandler(EState.Staying, EState.Moving, () =>
{
// Некий код
});
// Делегат будет выполняться до тех пор, пока состояние актуально.
state.SetProcessor(EState.Rotating, () =>
{
// Некий код
// В нужный момент переключаемся на другое состояние
state.SwitchState(EState.Moving);
});
// Переключает состояние на указанное, если текущее состояние таковым не является.
state.SwitchStateIfAnother(EState.Moving);
// Нужно вызывать в Update(), чтобы машина состояний постоянно работала
state.Process();
```
<br>
Важно учесть, что при смена состояния машины, не означает моментальный выход из делегата. Необходимо вызывать return, иначе код будет выполняться дальше и возможен непредсказуемый результат.
.png)