Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (1)

Лучшие ответы пользователя

Все ответы (9)
  • Можете по простому объяснить, как сделать машину состояний?

    @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);

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