unity – Combining Rotation, Jump, and Crouch Animations with 2D Blend Tree

I have a 2D Freeform Blend Tree that I’m using to animate a character that can currently:

  • Walk / Sprint Forward
  • Walk / Sprint Backward
  • Strafe / Sprint Strafe Left
  • Strafe / Sprint Strafe Right
  • Idle

My goal is to add in rotation, jump, crouch, and “firing when walking” animations.

In just dealing with turning or even jumping for now, I understand how to handle and call the animations in the code, but not sure of how it should be set up in the animator.

Do I transition to rotation/jump animations on the base layer? I’m reserved doing it this way because I lose the ability to blend and take advantage of those transitions.
Can I build it into my current 2D blend tree even though the blend tree is only X and Z axis?

enter image description here

public class twoDControllerMovement : MonoBehaviour
    Animator animator;
    public CharacterController controller;

    (SerializeField) private float walkSpeed = 12.0f;
    (SerializeField) private float strafeSpeed = 10.0f;
    (SerializeField) private float sprintMultipler = 2.0f;
    (SerializeField) private float rotationSpeed = 120.0f;

    // Start is called before the first frame update
    void Start()
        animator = GetComponent<Animator>();
        controller = GetComponent<CharacterController>();

    // Update is called once per frame
    void Update()

        // handle sprint
        float currentWalkSpeed = walkSpeed;
        float currentStrafeSpeed = strafeSpeed;
        bool runPressed = false;

        // handle shift
        if (Input.GetKey(KeyCode.LeftShift))
            currentWalkSpeed = walkSpeed * sprintMultipler;
            currentStrafeSpeed = strafeSpeed * sprintMultipler;
            runPressed = true;

        // calculate movement
        float strafe = Input.GetAxis("Strafe") * currentStrafeSpeed * Time.deltaTime;
        float translation = Input.GetAxis("Vertical") * currentWalkSpeed * Time.deltaTime;
        float rotation = Input.GetAxis("Horizontal") * rotationSpeed * Time.deltaTime;

        // execute movement
        transform.Translate(strafe, 0f, translation);
        transform.Rotate(0, rotation, 0f);

        // handle movement animations
        if (runPressed) {
            animator.SetFloat("VelocityZ", Input.GetAxis("Vertical") * sprintMultipler);
            animator.SetFloat("VelocityX", Input.GetAxis("Strafe") * sprintMultipler);
        } else 
            animator.SetFloat("VelocityZ", Input.GetAxis("Vertical"));
            animator.SetFloat("VelocityX", Input.GetAxis("Strafe"));

        // handle roration animations
        if (Input.GetAxis("Horizontal") < 0.1f)
        } else if (Input.GetAxis("Horizontal") > 0.1f)


Also open to any feedback on improving the code above, my goal is as small and clean as possible! I do have a slight delay in animations starting when switching directions that I have to work out at some point and would eventually.