WasTabon
@WasTabon

Можете по простому объяснить, как сделать машину состояний?

А то в ютубе 100500 видео и 100500 способов это сделать, немного непонятно что писать надо
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@zukrac
Машина (допустим MyFsm) управляет состояниями внутри себя.
И твой игровой Update() не содержит код для всех состояний, он просто содержит 1 строку - MyFsm.Tick()
Если нужно сменить состояние пишешь MyFsm.SetState(newState).
Всё, простая машина состояний готова.
Пример методов:
public class StateMachine
{
        public void Tick() {}
        public void SetState(IState state) {}
}
public interface IState
{
    void OnEnter();
    void Tick();
    void OnExit();
}

Можно расширить это дело классом переходов - Transition(IState from, IState to, bool Funция predicate) чтобы ограничить машину состояний. И дать предикаты (функции-условия) для переходов.
Потом в Start() можно будет создать что-то вида:
fsm = new FSM.StateMachine();
        
// What states
var wait = new Waiting(this);
var move = new Moving(this, 5f);
var attack = new Attacking(this, Player.Instance);

// Transitions
fsm.AddTransition(wait, move, () => isTargetInRange);
fsm.AddTransition(move, wait, () => !isTargetInRange);
fsm.AddTransition(attack, wait, () => attack.IsComplete());

fsm.SetState(wait);

и дальше оно само себя управляет. Сделаешь базовое, потом станет понятно что там на Ютубе хотят показать. Я сам долгое время не понимал эту тему.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы