Skip to content

State

A pattern that separates behavior by state into objects and swaps behavior based on state transitions.

  • When player movement and combat states keep increasing.
  • When if-else state branching becomes too large.
  • Context
  • State Interface
  • Concrete State

The code below is a simplified Unity example based on the scenario described above.

public interface ICharacterState
{
void Tick(PlayerStateMachine stateMachine);
}
public sealed class IdleState : ICharacterState
{
public void Tick(PlayerStateMachine stateMachine)
{
if (stateMachine.MoveInput > 0f)
{
stateMachine.ChangeState(new RunState());
}
}
}
public sealed class RunState : ICharacterState
{
public void Tick(PlayerStateMachine stateMachine)
{
if (stateMachine.MoveInput <= 0f)
{
stateMachine.ChangeState(new IdleState());
}
}
}
  • Behavior is separated into smaller units, which reduces the impact of changes.
  • Adding or swapping rules is relatively safe.
  • As the number of objects and indirect calls increases, the flow can become harder to follow.
  • Ordering bugs should be pinned down with tests.

This shows the flow where the context delegates to the current state object and performs transitions.

State Flow