← Back to Blog tutorials

Godot 4 AnimationPlayer: Skeletal animation from Blender GLB

By BitSoul Team6/9/2026Updated 8/7/20263 min read170 views
Godot 4 AnimationPlayer: Skeletal animation from Blender GLB

Rigged characters are only as good as the pipeline that gets them into your engine. Export a skeletal mesh from Blender as a GLB file, import it into Godot 4, and hook up the AnimationPlayer node so every clip is accessible from GDScript — here's the full workflow, step by step.

Set up the armature and NLA editor in Blender

Before exporting, your rig needs clean animation data. Each distinct action — idle, run, attack — should live as a named Action in Blender's NLA Editor, stashed as an NLA strip.

Set up the armature and NLA editor in Blender — illustrated

Key steps in Blender:

  1. Select your armature object in the outliner
  2. Open the Action Editor (switch a viewport to *Dope Sheet > Action Editor*)
  3. For each animation, name it clearly: `idle`, `run_forward`, `attack_slash`
  4. Click Push Down to stash the action as an NLA strip
  5. Repeat for every clip

Naming matters — Godot will surface these names directly in the AnimationPlayer.

GLB export settings

In Blender's export dialog (`File > Export > glTF 2.0 / GLB`):

| Setting | Value |
|---|---|
| Format | GLB (binary) |
| Include > Selected Objects | ✓ (mesh + armature only) |
| Armature > Add Leaf Bones | ✗ off |
| Animation > Export NLA Strips | ✓ on |
| Animation > All Clips | ✓ on |
| Animation > Optimize Animation Size | ✓ on |

Disabling *Add Leaf Bones* prevents Godot from adding phantom tip bones that break IK chains.

```python
# Blender Python equivalent (for batch scripts)
import bpy
bpy.ops.export_scene.gltf(
filepath="/path/to/character.glb",
export_format='GLB',
export_animations=True,
export_nla_strips=True,
export_all_influences=False,
export_optimize_animation_size=True,
export_leaf_bone=False
)
```

Import the GLB and connect AnimationPlayer in Godot 4

Drop the GLB into your Godot project's `res://assets/characters/` folder. Godot auto-generates an `.import` file and creates an internal `AnimationPlayer` node containing all your NLA strips as animation tracks.

Import the GLB and connect AnimationPlayer in Godot 4 — illustrated

Import configuration

Select the GLB in the FileSystem panel, open the Import dock, and check:

Hit Reimport after any change.

Scene structure

Instance the GLB scene (`Ctrl+Shift+A`) into your level. The resulting node tree looks like this:

```
Character (Node3D)
└─ character_root (Node3D)
├─ Skeleton3D
│ └─ [BoneAttachments...]
├─ MeshInstance3D
└─ AnimationPlayer
```

Access the player via `$character_root/AnimationPlayer` or cache a reference:

```gdscript
@onready var anim_player: AnimationPlayer = $character_root/AnimationPlayer

func _ready() -> void:
anim_player.play("idle")
print(anim_player.get_animation_list()) # Debug: list all clips
```

Blending and transitions

Godot 4's `AnimationPlayer` supports crossfade blending:

```gdscript
# Crossfade from current to run in 0.2 seconds
anim_player.play("run_forward", -1, 1.0, false)
anim_player.queue("run_forward") # Loop without gap

# Or use AnimationTree for full state machine control
```

For complex character controllers, swap to an AnimationTree with a `AnimationNodeStateMachine` — but start with AnimationPlayer to verify all clips export correctly first.

Troubleshoot common export issues

Missing animations in Godot — check that all actions were pushed down as NLA strips before export. Blender only exports stashed strips by default.

Scale is wrong (100× too large) — your armature's scale isn't applied. In Blender, select the armature, press `Ctrl+A > All Transforms` to apply scale before export.

Bone names are `Bone.001` etc. — rename bones in the Armature data properties before export; Godot cannot rename them after import without losing track references.

T-pose on first frame — add an explicit keyframe for all bones on frame 0 of your idle animation to prevent Godot interpolating from the rest pose.

Quick checklist before every export

Once the AnimationPlayer is wired and `anim_player.play("idle")` runs cleanly, browse the 747 free game-ready GLB assets at BitSoul's marketplace — many include pre-rigged characters and props ready to drop straight into this workflow.

---

*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*

Tags: tutorials animation blender godot rigging 3d-models workflow

Skip the modelling — download it instead

A free BitSoul account gets you 2 game-ready models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models