Course contentsShow
← Unity Game Development
Lesson 385 of 8286. Animation and CinemachineFree lesson

Driving Animator Parameters via C# Scripts

Write C# code to dynamically update Animator parameters based on player input, velocity, and game state variables.

In this lesson, you will learn how to bridge the gap between your game logic and your character's visual performance by dynamically driving Animator parameters through C# scripts.

Bridging Logic and Animation

While state machines handle when an animation plays, parameters act as the variables that feed those decisions. By updating these parameters (like Speed, IsJumping, or Direction) directly from your input handling or physics calculations, you ensure that your character's visual state perfectly mirrors their mechanical state in the game world.

To manipulate these parameters, we use the Animator component's setter methods. The key is to cache the reference to the Animator in Awake() or Start() and then update the values within your Update() loop or movement logic.

Implementation Example

Imagine a simple movement controller where we want to transition between an "Idle" and "Run" state based on the player’s horizontal movement.

using UnityEngine;

public class PlayerAnimationController : MonoBehaviour
{
    private Animator _animator;
    private Rigidbody _rb;

    private void Awake()
    {
        _animator = GetComponent<Animator>();
        _rb = GetComponent<Rigidbody>();
    }

    private void Update()
    {
        // Calculate speed based on horizontal velocity
        float speed = Mathf.Abs(_rb.velocity.x);

        // Update the Animator parameter
        // Ensure "MoveSpeed" matches the exact name in your Animator window
        _animator.SetFloat("MoveSpeed", speed);

        // Trigger a jump state
        if (Input.GetButtonDown("Jump"))
        {
            _animator.SetTrigger("JumpTrigger");
        }
    }
}

Why this matters

By passing the Rigidbody velocity or input values to the Animator, you create a responsive experience. If you define a 1D Blend Tree in your Animator controller using the "MoveSpeed" parameter, Unity will automatically transition between your "Idle" and "Walk" animations as the speed variable changes. Always ensure your parameter names (e.g., "MoveSpeed") match exactly what you have defined in the Animator Parameters tab; otherwise, Unity will throw a warning in the console and the animation will fail to update.

Key Takeaway: Driving Animator parameters via code allows you to create responsive, data-driven characters that react instantly to player input and physics changes.