Course contentsShow
← Unity Game Development
Lesson 523 of 8288. Artificial IntelligenceFree lesson

Implementing Hierarchical State Machine Logic

Build nested state structures to manage complex behaviors where sub-states handle specific tasks within a broader primary state like combat mode.

In this lesson, you will learn how to nest states within a primary state to organize complex agent behaviors without creating a "spaghetti" of transitions.

The Concept of Nesting

When building AI, you often encounter "modes" like Combat. Within Combat, your agent might need to perform specific sub-tasks: Strafe, Attack, or Reload. A flat state machine would require every single sub-state to know how to transition to every other state, leading to an explosion of transition logic.

A Hierarchical State Machine (HSM) solves this by allowing a parent state to act as a container. The parent state manages the high-level logic (e.g., "Is the target in range?"), while the active child state handles the granular execution. If the parent condition fails, it exits the entire branch, ensuring no sub-state logic continues to run.

Structural Implementation

You can implement this by giving your State base class a reference to a SubState. The parent's Update method delegates its work to the child:

public class CombatState : State {
    private State _currentSubState;

    public override void UpdateState() {
        // High-level check: Is the enemy still alive?
        if (!target.isAlive) {
            machine.ChangeState(new PatrolState());
            return;
        }

        // Delegate logic to the specific sub-task
        _currentSubState?.UpdateState();
    }
}

By structuring your logic this way, the CombatState doesn't need to know the implementation details of AttackState or ReloadState. It simply manages the current child, while the child focuses exclusively on its specific behavior. If you need to switch from Attack to Reload, you only update the _currentSubState reference within the CombatState container.

This approach keeps your State classes lean and single-purposed, strictly following the component-based logic separation we discussed earlier. It turns a massive, unmanageable state graph into a clean, tree-like hierarchy that is much easier to debug and extend as your AI grows in complexity.

Key Takeaway: Hierarchical State Machines simplify complex AI by grouping related sub-behaviors under a parent state, allowing for cleaner transitions and centralized condition checking.