Una State Machine organiza comportamientos según estados.

Ejemplos:

Idle
Walk
Run
Jump
Attack
Dead

Enum simple

public enum PlayerState
{
    Idle,
    Walk,
    Run,
    Jump
}

Cambiar estado

private PlayerState estado;

void CambiarEstado(
    PlayerState nuevoEstado)
{
    estado = nuevoEstado;
}

Switch

switch (estado)
{
    case PlayerState.Idle:
        break;

    case PlayerState.Run:
        break;
}

Para sistemas grandes

Podés separar cada estado en su propia clase.

Ejemplo:

PlayerState
├── IdleState
├── RunState
├── JumpState
└── AttackState

Cuándo usarlo

Muy útil para: