Artist & Developer Guide

Blender → Unity Pipeline

FBX Export, Animation Setup & Troubleshooting


Export Pipeline
Blender
Scene Prep → Export
FBX
.FBX File
Meshes, Bones, Animations
Import
Unity
Import → Configure → Play
TL;DR
Quick Reference Checklist
What Exports to Unity (and What Doesn't)
FBX is a geometry and animation container — not a full scene format. Know what crosses the bridge.
Exports
Meshes & geometry
UV Maps
Vertex Colors
Armatures & bone weights
Bone Animations (keyframes)
Shape Keys / Blend Shapes
Multiple Materials (slots)
Does NOT Export
Geometry Nodes (procedural — must bake to mesh with Ctrl+A first)
Particle Systems (rebuild in Unity VFX Graph or Shuriken)
Shader Nodes (materials must be recreated in Unity)
Constraints (IK, Track-To — bake to keyframes via Bake Action first)
Physics simulations (bake to keyframes first)
Modifiers (must Apply before export — Mirror, Subdivision, etc.)
Blender Scene Preparation
Get your scene clean before touching the export button.

Apply All Transforms

Select all objects (A), then Ctrl+AAll Transforms. This bakes position, rotation, and scale into the mesh data so the object reads as (0,0,0) position, (0,0,0) rotation, and (1,1,1) scale in the outliner. Without this, Unity receives the raw transform offsets and the model's proportions, position, or orientation will be wrong.

Apply All Modifiers

Modifiers (Mirror, Subdivision, Solidify, Boolean, Array, etc.) are Blender-only constructs. The FBX exporter operates on the base mesh, not the modified result. For each modifier in the stack:

  1. Hover over the modifier panel
  2. Click the dropdown arrow → Apply (or Ctrl+A in the modifier dropdown)
  3. Work top-to-bottom — order matters for stacked modifiers

If the FBX export dialog has Apply Modifiers checked, it applies them at export time. But it's safer to apply manually so you can verify the result before exporting.

Clean Hierarchy

Your scene should contain only what you're exporting. Delete unused objects — especially Blender's default Cube, Camera, and Light. If your model is animated, the hierarchy should be:

  • Armature (parent)
  •     Mesh (child, parented with Armature Deform)

Extra objects in the scene get exported into the FBX and appear as unwanted GameObjects in Unity.

Set Origin

The object's origin in Blender becomes the pivot point in Unity. Set it intentionally:

  • Object → Set Origin → Origin to Geometry — centers the origin inside the mesh bounding box
  • Object → Set Origin → Origin to 3D Cursor — place the 3D cursor at world origin (Shift+S → Cursor to World Origin) first, then set origin to cursor. This puts the pivot at the model's feet, which is usually what you want for game characters.

Verify Scale

In the Properties panel (N), check that Scale reads 1.000 on all axes. If it doesn't, apply transforms first (Ctrl+A → All Transforms). A non-uniform scale that isn't applied will cause stretching or squishing in Unity.

!
Unapplied scale is the #1 cause of wrong proportions in Unity. Always Ctrl+A → All Transforms before export. If you're unsure, do it anyway — applying identity transforms is harmless.
FBX Export Settings
File → Export → FBX (.fbx). Use these settings for Unity compatibility.
Setting Value Why
Path Mode Auto Resolves texture paths automatically
Forward -Z Forward Matches Unity's coordinate system (Unity forward is +Z, Blender's -Y maps to -Z)
Up Y Up Unity uses Y-up (Blender uses Z-up)
Apply Scalings FBX All Bakes scale into geometry so no runtime conversion is needed
Apply Transform ON Bakes axis conversion into the mesh data
Selected Objects Recommended Export only what you need — prevents scene junk (cameras, lights, helpers) from leaking in
Apply Modifiers ON Exports the final mesh result, not the base mesh before modifiers
Add Leaf Bones OFF Unity ignores leaf bones — they only add clutter to the bone hierarchy
Bake Animation ON Required if the FBX contains animations. Bakes constraint results into keyframes.
NLA Strips OFF (usually) Unless using NLA workflow for multiple actions. Frame-range splitting is simpler.
i
For models without animation, uncheck Armature and Animation in the Include section to keep the FBX clean. This avoids empty armature nodes in Unity's hierarchy.
Axis Conversion
Blender
X
Z
Y
Z up · Y forward
bakeAxisConversion
Unity
X
Y
Z
Y up · Z forward
Animation Export
The most critical section. Root bone mistakes cause floating, spinning, and drifting in Unity.
!
Root bone with position or rotation keyframes causes models to float and spin in Unity. This is the most common animation pipeline issue. Always animate child bones only — the root bone must stay at origin (0,0,0) with identity rotation.
Root Bone Behavior
Wrong
↑↓ ←→
Root bone
Spine
Root bone moves → Model floats & spins in Unity
Correct
--
Root at origin
↑↓
Spine
←→
←→
Root stays at origin → Child bones animate → Clean playback

Root Bone Rules

The root bone (the topmost bone in your armature hierarchy) must stay at (0, 0, 0) with (0, 0, 0) rotation for the entire animation. It serves as a stable anchor point.

  • No location keyframes on the root bone — these cause the model to float above or sink below its collider
  • No rotation keyframes on the root bone — these cause the model to spin, and the rotation accumulates with each animation loop
  • All visible animation (squash, stretch, bounce, limb movement) goes on child bones below the root

Converting Moving Animation to In-Place

If you already have an animation with root bone movement, you can strip it without redoing the animation:

  1. Select the Armature and enter Pose Mode (Ctrl+Tab)
  2. Select the root bone
  3. Open the Graph Editor or Dope Sheet
  4. Find the root bone's Location and Rotation channels
  5. Select all keyframes on those channels (A to select all within the channel)
  6. Delete them (X → Delete Keyframes)
  7. Child bone keyframes remain intact — the visible animation is preserved, minus the root travel

Multiple Animations in One File

Use frame range separation within a single Action. Leave 2–3 frame gaps between clips to prevent blending artifacts:

  • Idle: frames 0–30
  • Walk: frames 33–61
  • Attack: frames 65–90
  • Death: frames 93–120

Document your frame ranges in a text file or spreadsheet so the developer importing in Unity knows where to split clips. The frame numbers map directly to Unity's Animation tab clip splitting.

Baking Constraints

If your animation uses IK solvers, Track-To, Copy Rotation, or other constraints, you must bake them to raw keyframes before export. The FBX format doesn't support Blender's constraint system.

  1. Select the Armature
  2. Enter Pose Mode
  3. Select all bones (A)
  4. Go to Object menu (in header) → AnimationBake Action
  5. Check Visual Keying (bakes the visual result of constraints, not the raw values)
  6. Check Clear Constraints (removes constraints after baking so they don't interfere)
  7. Set the frame range to match your animation
  8. Click Bake

NLA Strips

An alternative to frame-range splitting: push each Action down to an NLA strip. The FBX exporter can export all NLA strips as separate takes, which Unity reads as separate clips automatically. However, the simpler approach is using frame ranges in a single Action — it's easier to manage and less error-prone. Use NLA only if you have a complex multi-action workflow.

Unity FBX Import Settings
Select the FBX in the Project window and configure these in the Inspector.
Setting Tab Value Why
Scale Factor Model 1 Match Blender's 1:1 unit scale
Use File Scale Model OFF Use Unity's Scale Factor value instead of whatever the FBX file declares
Bake Axis Conversion Model ON Bakes the Z-up to Y-up rotation into vertex data at import time. Without this, models appear sideways and require a runtime -90 X rotation hack.
Import Cameras Model OFF Blender's default Camera silently overrides the Main Camera — causes gray skybox, wrong angles, and mirrored UI on scene reload
Import Lights Model OFF Blender's default Light creates unwanted scene lighting
Animation Type Rig Generic For non-humanoid characters (enemies, props). Use Humanoid only for human-proportioned characters with standard bone names.
Avatar Definition Rig Create From This Model Generates the Avatar asset needed by the Animator component. Without this, the Animator has no avatar and animations won't play.
Import Animation Animation ON Enable if the FBX contains animation clips. Leave OFF for static meshes.
!
Import Cameras defaulting to ON has caused multiple production bugs in this project. A hidden Camera child object from the FBX overrides the Main Camera at the same depth, producing gray skybox, wrong camera angles, and mirrored UI — especially on scene reload via SceneManager.LoadScene. Always disable it.
Animation Clip Setup in Unity
Split, loop, and configure clips after import.

Splitting Clips

In the FBX Inspector → Animation tab, you'll see a default clip covering the full frame range. To split it into individual clips:

  1. Click the + button under the clips list to add a new clip definition
  2. Name each clip clearly (e.g., idle, walk_static, attack)
  3. Set Start and End frames matching the Blender frame ranges from the artist's notes
  4. Repeat for each animation in the FBX
  5. Click Apply to reimport with the new clip definitions

Loop Settings

Each clip has loop settings that control how it repeats. These are critical for preventing drift.

Setting What It Does When to Use
Loop Time Clip repeats continuously Walk cycles, idles, any repeating animation
Loop Blend Smoothly blends last frame back to first Most looping animations — prevents popping at the loop boundary
Loop Blend Position Y Clamps vertical drift over loop When animation drifts up or down over the cycle
Loop Blend Position XZ Clamps horizontal drift When animation drifts sideways over the cycle
Loop Blend Orientation Clamps rotation drift When animation slowly rotates over the cycle
Keep Original Position Y Preserves the Y offset from Blender Usually ON — keeps model at correct height relative to the ground
!
If your model floats or sinks over time, enable Loop Blend Position Y. If it slowly rotates, enable Loop Blend Orientation. These clamp root bone drift that accumulates over loops.
Wiring Animator Controllers
Create and assign Animator Controllers through the Unity Editor — never by hand.

Creating and Assigning a Controller

  1. In the Project window, right-click in the target folder → CreateAnimator Controller. Name it descriptively (e.g., SlimeAnimator).
  2. Double-click the controller to open the Animator window. You'll see the default Entry, Any State, and Exit nodes.
  3. Expand your FBX asset in the Project window by clicking the arrow. This reveals the animation sub-assets (clips) and the Avatar.
  4. Drag a clip from the FBX sub-assets into the Animator window. The first clip you add becomes the default state (shown in orange). This is the animation that plays on start.
  5. Drag additional clips for other states. Right-click states to create Transitions between them.
  6. On your prefab or GameObject, select it and find (or add) the Animator component in the Inspector.
  7. Assign the controller to the Animator's Controller field.
  8. Assign the Avatar from your FBX to the Animator's Avatar field. Click the circle picker button, then find your model's avatar (it will be named like YourModelAvatar).
  9. Set Apply Root Motion to OFF. Our enemies and characters use physics-driven movement (Rigidbody), not animation-driven root motion.
!
Never hand-write Animator Controller YAML files. Unity's internal graph serialization uses auto-generated fileIDs and complex node relationships that break when hand-edited. Always create and modify controllers through the Unity Editor's Animator window.
Troubleshooting
Click any card to expand the fix.
Model Floating
Root bone Y offset in animation
The animation has Y-position keyframes on the root bone, lifting the mesh above the collider. Fix in Blender: delete root bone Location keyframes in the Graph Editor. Fix in Unity: enable Loop Blend Position Y in the clip settings to clamp vertical drift.
Model Spinning
Root bone rotation keyframes
The animation has rotation keyframes on the root bone. Each loop accumulates rotation, causing the model to spin progressively faster. Fix in Blender: delete root bone Rotation keyframes. Fix in Unity: enable Loop Blend Orientation in the clip settings to clamp rotational drift.
?
Model Invisible
Wrong mesh fileID reference
The prefab or ScriptableObject references a mesh with the wrong fileID. This happens when fileIdsGeneration changes between imports. Fix: re-assign the prefab field using the FBX root GameObject directly (type: 3 in YAML, not type: 2). Never reference intermediate PrefabInstance wrappers.
Model Sideways
Missing bakeAxisConversion
Blender exports Z-up, Unity uses Y-up. Without bakeAxisConversion, the model appears rotated 90 degrees on the X axis. Fix: in the FBX import settings (Model tab), enable Bake Axis Conversion. This bakes the rotation into mesh vertices at import time instead of requiring a runtime rotation hack.
Wrong Scale
Unapplied scale in Blender
The object has non-1.0 scale in Blender that wasn't applied before export. Fix: in Blender, select the object → Ctrl+A → Scale. Re-export the FBX. In Unity, also verify that Use File Scale is OFF and Scale Factor is 1.
Missing Avatar
avatarSetup not enabled
The FBX import doesn't generate an Avatar, so the Animator component can't find one to assign. Fix: in the FBX import settings → Rig tab, set Avatar Definition to Create From This Model. Click Apply to reimport. The Avatar will now appear in the Animator's avatar picker.