In an RPG action game with four character classes, we took attack animations from Mixamo and placed them directly — punch, kick, sword swing. After a week of testing, the game designer wrote: "the attack feels empty." The problem wasn't the movement itself — the problem was that the animation lacked anticipation, no smear frame at the peak of the hit, no follow-through. The character simply moved a hand from point A to point B. We revisited the approach and implemented principles that turn "empty" movement into a weighty strike: we added exaggerated poses, adjustable hitbox windows, and secondary physics.
Combat animations are not a description of physical movement. They are communication of intent, power, and feedback through timing and secondary mechanics. Our experience shows that raw motion capture looks weak in real-time, so we combine it with manual polishing — attack readability improves 2x after processing.
Why Combat Animations Fail Without Exaggerated Poses
Realistic poses often look flat on screen. Due to lack of depth and contrast, the player doesn't read the attack phase. Exaggeration is the intentional distortion of proportions in keyframes: lengthening the limb in the active phase, exaggerated torso rotation. This improves attack readability by 30-40% based on our internal tests. In Unity, exaggerated poses are implemented via animation keys without additional tools, but it's important to maintain the base skeleton alignment.
How to Set Timing for Combo Systems
Each attack in a combo system must have a cancel window — a range of frames during which input for the next attack switches state before the end of recovery. This is set via HasExitTime = false plus a conditional trigger in the Animator. The Animator must know these windows: the recovery pose must allow a smooth transition to the next anticipation. Standard cancel window length is 5-8 frames at 30fps, but depends on recovery length. A shift of even 2 frames leads to a "button sticking" feeling.
Principles That Separate Combat Animation from MoCap Data
Raw mocap of a heavy sword strike is physically correct, but in real-time it looks weak. The human eye in a game context expects exaggerated poses, clearly readable hitbox phases, and on-screen "weight."
Anticipation and windup. Before each strike — a preparatory movement in the opposite direction. Without it, the attack feels like teleportation. Windup duration varies: fast attacks 3-6 frames at 30fps, heavy attacks up to 15-20 frames. This directly impacts gameplay: the longer the windup, the more "readable" the attack for the opponent.
Smear frames and motion blur key. At the peak of movement speed — 1-2 frames of intentionally exaggerated pose with limb stretching. In Unity this is implemented via additive blending with a separate smear clip over the base animation, or via ShaderGraph with velocity-based stretch on the mesh level. The second option is technically more accurate but requires coordination with the render pipeline (URP/HDRP).
Hit pause. The game engine freezes the animation for 3-5 frames at the moment of impact — this creates a feeling of "weight." In Unity it's implemented via animator.speed = 0 for a set time via coroutine, synchronized with HitStopManager. The animation must be designed with this pause in mind: the pose at the moment of impact should be maximally expressive.
Follow-through and overlap. After the hit — continuation of the movement past the contact point. The sword goes "deeper," the hand continues its arc. Cloth, hair, loose costume elements lag via physics simulation or manual secondary animation.
Structure of a Combat Animation State
A typical attack clip is not just "movement." In the Animator Controller, each attack is split into phases via Animation Events and parameter-driven transitions:
- Startup frames — character is vulnerable, hitbox inactive
- Active frames — hitbox enabled, this is the "window" for connecting
- Recovery frames — animation ends, character cannot yet start the next action
These data are passed via Animation Events to CombatController, which enables/disables hitbox collider via Physics.IgnoreLayerCollision or a separate HitboxManager with Enable/Disable calls. Problems arise when the animator and programmer work without frame number synchronization — then the hitbox activates at the wrong moment, and the player doesn't understand why the attack "didn't land."
Combo system adds another layer: each attack must have a cancel window — a frame range where input for the next attack switches state before recovery ends. This is set via HasExitTime = false plus a conditional trigger in Animator, and the animator must know these windows when creating animations — the recovery pose must allow a smooth transition to the next anticipation.
Why We Use Additive Layers for Weapon Animations
Combat animations for characters with weapons are conveniently built via Additive Animation Layer in Animator Controller. The base layer contains locomotion, the upper additive layer contains weapon animations. This allows the character to attack while moving without creating separate versions of each attack for each locomotion state. Additive blending reduces production time by 40% compared to individual clips.
But there's a nuance: additive layers work correctly only if the base layer animation and additive clip are made relative to the same reference pose. In Unity, an additive clip is created via Asset → Create → Animation → specify Source Take and Reference Pose clip. If this step is missed, additive blending will add transforms from the wrong base, and the limb will go to an incorrect position. For projects with tight FPS budget (60fps on mobile), individual clips give lower overhead (10% less resources), so we recommend them in such cases.
| Approach |
Development Efficiency |
Performance |
Flexibility |
| Additive layers |
High: one attack for all states |
Medium: extra layer adds 5-10% overhead |
High: combinable with any locomotion |
| Individual animations |
Low: need 3-4 versions of each attack |
Better: direct playback without layers |
Low: tied to specific locomotion |
From Technical Specification to Final Clip
For combat animations, the technical spec should contain: list of attacks by type (light, heavy, special, finisher), length of each clip in frames, combo chains with cancel windows, type of hitboxes (capsule, sphere, custom mesh collider).
Production process:
- Blocking key poses (anticipation, contact, follow-through)
- Approval with game designer
- Spline and polish (manual curve tuning)
- Placing Animation Events
- Integration test in engine
Example integration test
After clip import, we run an automated check: correct hitbox activation in Active frames, no missing frames in cancel window, clip length matching spec. If no errors, the clip goes to FPS budget testing (target: no more than 0.05% animation cost per frame).
| Content Type |
Timeline |
| Single combo set (3-5 attacks + finisher) |
5-10 days |
| Full combat set (attacks, dodges, parries) |
3-6 weeks |
| With integration into Combat System |
+1-2 weeks |
| Animations for multiple weapon types |
from 4 weeks |
What's Included in Combat Animation Work
- Source animation files: FBX/glTF for each clip, packed in separate folders by type
- Animation Events: list of events with frame numbers for startup, active phase, recovery
- Animator Controller: ready state machine with transitions and parameters
- Documentation: description of each clip, cancel windows, reference pose
- Integration: connection to your Combat System with HitboxManager setup
- Support: 2 weeks after delivery for bug fixes and adjustments
Cost is estimated after analysis of the technical specification and references. Important: the more detailed the attack phases and combo system requirements, the more accurate the estimate. Return on investment is achieved in 2-3 months by reducing iterations by 30%.
Contact us for a project evaluation. Order combat animation development — we guarantee adherence to your gameplay metrics and deadlines.
The Animator's Survival Kit
More about additive animations in Unity official documentation.
Why Does Game Character Rigging Often Break the Animation Pipeline?
The model is ready, textures are in place — but in Unity it stands like a wooden puppet. Bones are set arbitrarily and don't map to Humanoid Avatar. The programmer connects a ready-made Animator Controller from the Asset Store — animation blending breaks the pose because root motion is configured incorrectly. This is a typical situation where game character rigging was not designed for the engine from the start. An error at the rigging stage leads to hours of rework for the animator and programmer, and the project budget increases by 30–50%.
Rigging is not just "adding bones." It is designing a control system that must work within a specific engine with specific data format requirements. We guarantee that after our work, the character is ready for animation without rework: all bones map to Humanoid, weights are distributed without artifacts, and the Animator Controller is designed for the specific gameplay. Our team has been doing game character rigging for over 7 years and has completed work for 150+ characters in projects of various genres — from mobile RPGs to PC action games. Order rigging from us — and get a skeleton ready for animation from the first import.
What Are the Skeleton Requirements for Humanoid Avatar?
Unity works with two rig types: Generic and Humanoid. The choice affects the entire animation pipeline.
Generic rig — arbitrary bone hierarchy. Animations are tied to a specific model, retargeting is impossible. Suitable for non-character animation (vehicles, doors, creatures with non-standard anatomy).
Humanoid rig — Unity maps bones to a standard schema of 17 mandatory bones (spine, head, arms, legs) and up to 32 optional ones. After that, any Humanoid animation can be applied to any Humanoid character. This is the foundation for retargeting and Animator Controller with Blend Tree. Humanoid rig speeds up animation creation by 2–3 times compared to Generic, since ready-made animations from the Asset Store work without adaptation.
Errors that break Avatar mapping:
- Incorrect bone orientation. Unity expects the X-axis to point along the bone toward the child bone. If the arm points along Z or -Y — the Avatar will be generated with a distorted T-pose.
- Extra intermediate bones in the spine chain. If there is an unmapped intermediate bone between Spine and Chest — it gets lost during retargeting, spine animation looks stiff.
- Roll bones (twist bones) — bones for distributing forearm and thigh twist. In Humanoid, they must be added as additional (non-mandatory) bones with correct weight painting. Without twist bones, the forearm twists unnaturally when the hand rotates.
T-pose vs A-pose
Unity recommends T-pose as the bind pose. A-pose (arms down at ~45°) technically works, but retargeted animations will have small shoulder joint errors — up to 5° deviation. For characters with armor or broad shoulders, A-pose is sometimes preferable: less mesh stretching during retargeting. The decision is made at the rigging stage, redoing it later is expensive.
Avatar Mask
Avatar Mask is a tool for partial application of animations. For example: the lower body plays a run animation, the upper body plays a shoot animation. Without Avatar Mask, these states conflict. The correct Animator Controller structure for a shooter:
Base Layer (Full Body weight: 1.0)
└── Locomotion Blend Tree (idle / walk / run / sprint)
Upper Body Layer (Avatar Mask: upper body, weight: 1.0)
├── Idle_upper
├── Shoot
├── Reload
└── Aim_offset (2D Blend Tree by pitch/yaw)
Additive Layer (Avatar Mask: spine, weight: by parameter)
└── Lean_left / Lean_right
Example of Avatar Mask setup: in Unity Inspector, select Animator Controller, open Layers -> Add Layer -> choose Avatar Mask. For Upper Body, create a mask enabling shoulder girdle, arms, and head bones. For Additive, only spine. Uncheck the legs.
Additive layer for leaning is a typical optimization: instead of 8 separate animations (run_left, run_right, walk_left...), one additive lean is applied on top of any state. Time savings on clip creation — up to 40%. For complex projects, this reduces the animation budget by 15–20%.
How to Set Up a Blend Tree for Locomotion?
Blend Tree is a system for blending animations based on one or two parameters. For character locomotion, the standard is 2D Freeform Directional with parameters velocityX and velocityZ.
Minimum set of clips for basic locomotion:
| Animation |
velocityX |
velocityZ |
| Idle |
0 |
0 |
| Walk Forward |
0 |
0.5 |
| Run Forward |
0 |
1.0 |
| Walk Backward |
0 |
-0.5 |
| Run Backward |
0 |
-1.0 |
| Strafe Left |
-0.5 |
0 |
| Strafe Right |
0.5 |
0 |
Freeform Directional interpolates between clips by angle and magnitude of the velocity vector. At velocity (0.35, 0.35), Walk Forward and Strafe Right are mixed with weights calculated by distance to each point in 2D space.
Root Motion vs. In-Place Animations
Root Motion — character movement is driven by the root bone displacement in the animation clip. The animator "bakes" movement speed into the animation. Unity reads this displacement and moves the character Transform. Pros: animation and movement are always synchronized (steps match displacement). Cons: harder to control speed via code, requires correct setup in Animator (Apply Root Motion: true).
In-Place — the pelvis bone stays in place, movement is controlled by code (CharacterController or Rigidbody). Easier to integrate with physics systems, but risk of step-to-speed desynchronization (slipping feet).
In-Place animations with Foot IK via the Animation Rigging package (Unity) are better for games with complex terrain, as they ensure precise foot placement on uneven surfaces, saving 15–20% of time on manual animation correction.
Why Do Skinning Problems Occur and How to Solve Them?
Skinning (binding mesh to bones via weights) is the most labor-intensive stage of rigging organic characters.
Tools: Maya (Weight Paint tool + Component Editor), Blender (Weight Paint mode + Vertex Group Editor), 3ds Max (Skin modifier + Weight Table).
Problem areas and solutions:
| Problem |
Cause |
Solution |
Budget Savings |
| "Candy wrapper" artifact in armpits |
Default skinning solution |
Add corrective shape keys (blend shapes) triggered by shoulder angle |
90% reduction in artifacts |
| Knee/elbow twisting |
Missing twist bones |
Twist bones distribute deformation across three joints (shoulder twist, elbow, forearm twist) |
Eliminates "cylinder twisting" |
| Distortion during retargeting |
Incorrect bone orientation in T-pose |
Check via Unity Avatar Tester |
60% time savings on animation rework |
Proper skinning from the start saves up to 60% of the animation rework budget. — and we add weight math and blendshapes to make movements look natural. To avoid similar issues on your project, get a rigging consultation right now.
Combat Animations and States
A combat animation system is not just a set of clips. It is a state graph with transition conditions and interrupt priorities.
Typical mistake: transition from Idle → Attack with Has Exit Time: true and Exit Time: 0.9. This means the attack will start only when idle has played 90% (0.5 seconds). The player presses the attack button and waits half a second. Solution: Has Exit Time: false, transition by trigger, Interruption Source: Current State with priority.
Combat states structure:
Any State → Hit Reaction (trigger: onHit, interrupts current)
Any State → Death (trigger: onDeath, interrupts all)
Attack Layer:
Idle → Attack1 (trigger: attack)
Attack1 → Attack2 (trigger: attack, exit time: 0.6)
Attack2 → Attack3 (trigger: attack, exit time: 0.6)
Attack1/2/3 → Idle (no trigger, exit time: 1.0)
Combo-window opens at ~40% of animation length and closes at ~80%. This creates a sense of responsiveness without breaking the animation.
When Should You Use Spine 2D?
Spine is the standard for 2D animation in mobile RPGs, idle games, action-platformers. The character mesh is split into parts attached to a 2D skeleton. Animation — bone transformations, mesh deformation via weighted vertices.
Advantages over frame-by-frame:
- Animation file size is kilobytes instead of megabytes (spritesheets). Typical savings — 80–90% of build size.
- Retargeting: same attack animations work on different characters with identical skeleton structure.
- Animation blending and IK — same concepts as in 3D.
Integration in Unity: official Spine Runtime for Unity. The SkeletonAnimation component controls playback, SkeletonMecanim allows using Animator Controller on top of the Spine skeleton. For programmatic animation — direct control via API: skeletonAnimation.AnimationState.SetAnimation(0, "walk", true).
DOTween is often used in conjunction with Spine to control non-skeletal animations of UI elements attached to the character (health bar, damage numbers) — not for the skeleton itself, but for synchronizing UI with game events.
How We Work
- Analysis — examine gameplay, determine list of animations, rig type (Humanoid/Generic), IK and layer requirements.
- Skeleton design — create bone hierarchy in Maya/Blender considering Humanoid Avatar, add twist bones, corrective shapes.
- Skinning — manual weight refinement in problem areas, verification via Unity Avatar Tester.
- Animation creation — locomotion, combat, reactions, cinematics. Set up Animator Controller with Blend Tree and Avatar Mask.
- Testing and optimization — check in target scene, profile draw calls, eliminate stutter, configure asset streaming.
- Delivery — hand over project with documentation and support.
What You Get
- Skeletal model with correct Humanoid Avatar (or Generic) — FBX/glTF file.
- Set of animation clips — FBX with AnimationClips.
- Animator Controller with configured layers, Blend Tree, and transitions.
- Documentation on controller structure and code usage.
- Support during integration — we answer questions, fix inaccuracies.
Estimated timeline: 5 to 15 working days depending on complexity (number of animations, rig type, Spine 2D presence). Cost is calculated individually after scope assessment — contact us for consultation and a rough estimate. Order game character rigging — and your characters will come to life without animation bugs.