When creating complex state-based logic systems in an animator controller it can greatly help organisation to use a hierarchy of state machines. To create a state machine right click on the background on the animator window. and select Create Sub-State Machine This will create a state machine within the current layer or state machine level. Note the hexagonal shape of sub-state machines versus the standard rounded rectangular shape of individual states. Let's look at an example of when they are useful. Here we have an animator controller that's starting to look cluttered so before many more states are added to it it should be tidied up. To do this some of the states can be placed in to a state machine. In this case we could group all of the states that are to do with being Airborne in to one sub-state machine. To do this, first we make the state machine by right clicking on the background of the animator window and selecting Create Sub-State Machine. We can rename the state machine by clicking on it and changing it's name in the inspector, just like single states. Next we need to put some states in to this new state machine. We do this by selecting all the states that we want to move and dragging them on to the state machine. For this example we want to move Leap Takeoff, Leap Airborne, Falling and Landing states. Note the + icon that appears next to your cursor as you are dragging. When the states have been added to the state machine they will disappear from the current state machine or layer. To see them again in order to edit any of their properties for example simply double click on the sub-state machine. To go back to the containing layer or state machine double click on the Up node. Note that the breadcrumb at the top of the window shows you where abouts you are within the state machines. State machines can be used in a hierarchical structure. This means that within each layer of an animator controller there could be several state machines. Each of those could, in turn, have sub-state machines within them, and so on. Transitions can go from states outside to those inside a state machine. We can see from this example that when our states were added to the sub-state machine their transitions were retained. To make a new transition to a state machine right click on the state or state machine from which you are transitioning and select Make Transition. Then left click on the state machine you wish to transition to. From here a pop-up menu will appear offering you the choice to transition to any state, or state machine within the selected state machine. This includes the state machine itself. One way to transition out of a state machine is to use the Up node. This works like a link to all states and state machines that are not contained in the current state machine. The up node is labelled Up followed by the name of the parent state machine. If there is not parent state machine it will show the name of the layer it is in. In this example there was no parent state machine so the up node is labelled (Up) Base Layer. To make a transition out of a state machine right click on the state or state machine that you wish to transition from and select Make Transition then left click on the up node. You are then offered the same choices as when transitioning in to a state machine. Only this time it is a choice of the states and state machines above the current one you were viewing. In every layer and state machine there are green entry and red exit nodes. These are used to encapsulate state machines so that they have less dependence on states or state machines. They represent an alternative to using the up node. Transitions to and from state machines can either use the up node or the entry and exit nodes. Using the up node, transitions happen directly from state to state or from state to state machine. When using entry and exit nodes the transitions are to and from the state machine itself. A transition to a state machine will come in at the entry node and leave via the exit node. This may mean designing your transitions in a very different way. Instead of having a single transition through the up node there maybe be many. Let's take a look at an example. This is the same controller we saw in our earlier example. But the Locomotion and Airborne states have been put in to their own state machines. However instead of using transitions between each of the states as before entry and exit nodes are used. In the previous example there were transitions from Standing Locomotion to Leap Take Off and Falling. And a transition from Landing to Standing Locomotion. The condition to go from Standing Locomotion to Leap Take Off is the Jump trigger. However, once we have encapsulated a locomotion state in to a state machine it no longer matters what state we are transitioning to. Instead it just matters that we no longer want to be in this state machine. So we transition to the exit node with the jump trigger as a condition. Back in the complex animator controller the condition to go from standing locomotion to Falling is that the parameter "Grounded" is false In the entry and exit node example the same condition is required for a second transition to exit the locomotion state machine. Since we only have two state machines we can assume that if we are leaving one state machine we want to go in to the other As such there are no conditions for transitions between them. We have two transitions from the entry node of the Airborne state machine. The first is the default transition from the entry node. We can see this because it is orange in colour, instead of the normal white. This transition will be used when no other transition from the entry node can be used or if it's the only available transition. The other transition is greyed out. When a transition is grey like this it means that it has no knowledge of the state it is coming from. This particular transition is coming in to the state machine from the entry node, so it doesn't know which state it is coming from, as it could be from any source. We can see that the transitions between the locomotion and Airborne state machines were also greyed out. Again this is because they don't know which state they are transitioning from. When a transition is greyed out, the only editable aspect are it's conditions. Since the transition doesn't know which state it is coming from any other details about the transition would be meaningless. To control the duration and other aspects use the transition from the originating state. The transition to Falling has the condition that "Grounded" is false. These two transitions combined mean that when we enter this state machine if grounded is false Falling will be played. Otherwise the default transition will be used and "Leap Take Off" will be played. The benefit of using entry and exit nodes to encapsulate state machines like this is reusability. If a particular animator controller has a state machine that could be used elsewhere then the state machine can simply be copied to the other animator controller. Because the state machine is self-contained, i.e. it doesn't have any dependencies outside of itself it doesn't matter what other states or state machines are in the other animators that you copy to. For more information on animators and animator controllers please see the information linked below.