```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, иначе код будет выполняться дальше и возможен непредсказуемый результат. ![Машина состояний от Олега (StateSwitcher)](images/Машина%20состояний%20от%20Олега%20(StateSwitcher).png)