Animation
Skill XeldarAlz/everything-claude-unity/.claude/skills/systems/animation
Unity animation system — Animator controllers, layers, blend trees, state machine behaviors, root motion, animation events, Timeline.From its SKILL.md
npx -y skills add XeldarAlz/everything-claude-unity --skill animationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 20 stars20 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
3.4 KB, as published. Nobody here has run it
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 Motionon 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)