예제 #1
0
파일: Fsm.cs 프로젝트: zsaladin/UnityFSM
        void Start()
        {
            FsmState idle = new FsmState(this);
            idle._actions = new FsmAction[] { new FsmAction_Idle(idle) };

            FsmState move = new FsmState(this);
            move._actions = new FsmAction[] { new FsmAction_Move(move) };

            idle._transitions = new FsmTransition[]
            {
                new FsmTransition
                {
                    NextState = move,
                    Conditions = new List<FsmCondition>
                    {
                        new FsmCondition_Input(idle) { IsPressedCondition = true }
                    }
                }
            };

            move._transitions = new FsmTransition[]
            {
                new FsmTransition
                {
                    NextState = idle,
                    Conditions = new List<FsmCondition>
                    {
                        new FsmCondition_Input(move) { IsPressedCondition = false }
                    }
                }
            };

            SetNextState(idle);
        }
예제 #2
0
파일: Fsm.cs 프로젝트: zsaladin/UnityFSM
        void SetNextState(FsmState nextState)
        {
            if (State != null)
            {
                State.Exit();
            }

            PrevState = State;
            State = nextState;
            State.Start();
        }
예제 #3
0
 public FsmAction_Idle(FsmState state)
     : base(state)
 {
 }
예제 #4
0
 public FsmAction(FsmState state)
 {
     State = state;
 }
예제 #5
0
 public FsmCondition_Input(FsmState state)
     : base(state)
 {
 }
예제 #6
0
 public FsmCondition(FsmState state)
 {
     State = state;
 }
예제 #7
0
 public FsmAction_Move(FsmState state)
     : base(state)
 {
     _transform = state.FSM.transform;
     _rigidbody = state.FSM.GetComponent<Rigidbody>();
 }
예제 #8
0
 public void StartFsm(FsmState startState)
 {
     ChangeState(startState);
     m_Started = true;
     m_OnFsmStart?.Invoke();
 }
예제 #9
0
 public void ChangeState(FsmState state)
 {
     m_CurrentState?.OnExit();
     m_CurrentState = state;
     state.OnEnter();
 }