Skip to content
Development
Skill

/animation

Unity animation system — Animator controllers, layers, blend trees, state machine behaviors, root motion, animation events, Timeline.

From plugin
everything-claude-unity
2442 skills20 agents27 commands
Install
$ npx -y skills add XeldarAlz/everything-claude-unity --skill animation --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/animation

Context preview

The summary Claude sees to decide when to auto-load this skill.

Unity animation system — Animator controllers, layers, blend trees, state machine behaviors, root motion, animation events, Timeline.

SKILL.md

animation.SKILL.md
name: animation
description: "Unity animation system — Animator controllers, layers, blend trees, state machine behaviors, root motion, animation events, Timeline."
globs: ["**/*.controller", "**/*Anim*.cs", "**/*.anim"]

Animation System

Animator Controller

Parameters

// Cache hash IDs — NEVER use string version in Update
private static readonly int SpeedHash = Animator.StringToHash("Speed");
private static readonly int JumpHash = Animator.StringToHash("Jump");
private static readonly int IsGroundedHash = Animator.StringToHash("IsGrounded");
private static readonly int AttackHash = Animator.StringToHash("Attack");

private void Update()
{
    _animator.SetFloat(SpeedHash, _currentSpeed);
    _animator.SetBool(IsGroundedHash, _isGrounded);
}

// Triggers: fire once, auto-reset
public void Attack() => _animator.SetTrigger(AttackHash);

Transition Settings

  • **Has Exit Time:** animation finishes before transitioning (good for attacks, bad for instant response)
  • **Fixed Duration:** transition time in seconds vs normalized
  • **Transition Duration:** blend time (0 for instant, 0.1-0.25 for smooth)
  • **Interruption Source:** which transitions can interrupt this one

Layers

  • Base Layer: locomotion (walk, run, idle)
  • Upper Body Layer (Avatar Mask): aiming, attacks (overrides base)
  • Additive Layer: breathing, hit reactions (adds on top)

Blend Trees

**1D:** Speed parameter → walk/run blend **2D Simple Directional:** X/Y input → directional movement (forward, back, strafe) **2D Freeform:** more flexible placement of motion clips

State Machine Behaviors

public sealed class AttackStateBehavior : StateMachineBehaviour
{
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // Enable hitbox
        animator.GetComponent<CombatSystem>().EnableHitbox();
    }

    public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        // Disable hitbox
        animator.GetComponent<CombatSystem>().DisableHitbox();
    }
}

Root Motion

  • Enable `Apply Root Motion` on Animator
  • Override in `OnAnimatorMove()` for custom control:
private void OnAnimatorMove()
{
    // Use animation's root motion for position
    Vector3 deltaPosition = _animator.deltaPosition;
    transform.position += deltaPosition;

    // Use animation's rotation
    transform.rotation *= _animator.deltaRotation;
}

Animation Events

Call methods from specific frames in animation clips:

// Called from animation event on frame 12
public void OnFootstep()
{
    _audioSource.PlayOneShot(_footstepClip);
}

public void OnAttackHit()
{
    // Check hitbox collisions at this exact frame
}

IK (Inverse Kinematics)

private void OnAnimatorIK(int layerIndex)
{
    if (_lookTarget != null)
    {
        _animator.SetLookAtWeight(1f, 0.3f, 0.6f, 1f);
        _animator.SetLookAtPosition(_lookTarget.position);
    }

    // Foot IK for uneven terrain
    _animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, 1f);
    _animator.SetIKPosition(AvatarIKGoal.LeftFoot, _leftFootTarget);
}

Timeline Integration

  • Animation Track: play animation clips on any Animator
  • Custom Playable: create custom Timeline clips with `PlayableAsset` + `PlayableBehaviour`
  • Signal Track: fire events at specific times (similar to animation events but on Timeline)
Read more
Ships witheverything-claude-unity

The ultimate Claude Code toolkit for Unity game development. A production-ready, plug-and-play system that gives Claude Code deep Unity expertise — from writing performant C# to building scenes, profiling performance, and triggering iOS/Android builds — all

Get the whole plugin

Other skills on everything-claude-unity.