오늘의 학습 키워드

Finite State Machine

 

공부한 내용

Finite State Machine

한 번에 한 개의 상태만 가질 수 있고 다른 상태로 전이가 가능한 모델을 FSM(유한 상태 머신)이라고 부른다.

게임에서는 애니메이션 쪽에서 자주 쓰이게 된다. (Idle <-> Walk <-> Run <-> Attack)

 

이번에 배웠던 예제에서는 신기한 구조를 가지고 있었는데 각 상태들이 new 생성자를 통하여 상태 머신의 인스턴스를 받아온다는 것이었다.

그리고 각 상태는 IState 인터페이스를 상속받으며 ChangeState로 상태머신의 IState변수 인스턴스를 교체해준다. (상태 전이)

public class PlayerBaseState : IState
{
    protected PlayerStateMachine stateMachine;
    protected readonly PlayerGroundData groundData;

    public PlayerBaseState(PlayerStateMachine playerStateMachine)
    {
        stateMachine = playerStateMachine;
        groundData = stateMachine.Player.Data.GroundData;
    }
}
public class PlayerStateMachine : StateMachine
{
    // States
    public PlayerIdleState IdleState { get; }
    public PlayerWalkState WalkState { get; }
    public PlayerRunState RunState { get; }
    public PlayerJumpState JumpState { get; }
    public PlayerFallState FallState { get; }
    public PlayerComboAttackState ComboAttackState { get; }

    public PlayerStateMachine(Player player)
    {
        IdleState = new PlayerIdleState(this);
        WalkState = new PlayerWalkState(this);
        RunState = new PlayerRunState(this);

        JumpState = new PlayerJumpState(this);
        FallState = new PlayerFallState(this);

        ComboAttackState = new PlayerComboAttackState(this);
    }
}
public interface IState
{
    void Enter();
    void Exit();
    void handleInput();
    void Update();
    void PhysicsUpdate();
}
public abstract class StateMachine
{
    protected IState currentState;

    public void ChangeState(IState newState)
    {
        currentState?.Exit();

        currentState = newState;

        currentState?.Enter();
    }
}

 

 

오늘의 회고

 오늘은 상태 머신에 대해서 배웠다. 어렵지만 그림으로 정리하니 이해하기 좀 더 쉬워진 것 같다. 저 구조 이후에는 BaseState를 상속받은 각 상태에서 조건만 추가하여 다음 상태로 넘어가게 구현하면 된다. 처음 구조짤 때는 어렵지만 그냥 한 곳에서 짜는 것보다 유지 보수하기 쉬워보인다.

 내일은 개인 과제로 무엇을 만들지 기획을 좀 해봐야겠다. 내일도 파이팅!

+ Recent posts