Download Download Support FPE

How to Trigger Gameplay from Blender Animation Frames

How to Trigger Gameplay from Blender Animation Frames

The animator already knows the exact frame when a foot lands, a latch clicks, or a magical puff should appear. Put the event on that authored moment in Blender and let the exported animation carry its timing into the game.

You will make: a Blender action with a named FPE Frame Event on the exact beat where gameplay should respond.

When should you use frame events?

Use them when timing belongs to the authored animation: footsteps, impact windows, particles, audio cues, prop release, or cutscene beats. Use an animation-finished signal for end-of-clip state changes. Do not use frame events to update a value continuously; property tracks already do that better.

Blender Action Editor showing a door animation and the playhead at frame 42
Work in the Action Editor so the event can be placed against a precise moment in the animation.

Place the event in Blender

  1. Open the action in the Dope Sheet → Action Editor.
  2. In Folded Paper Engine (Animation), choose whether the action should autoplay or loop.
  3. Move the playhead to the exact authored moment.
  4. In Folded Paper Engine (Frame Events), add a Frame Event and give it a stable Scene Event name such as FOOTSTEP or DOOR_LATCHED.
  5. Create the matching Scene Event and start with one command you can see or hear.
  6. Export with animation and Custom Properties enabled, then test normal, interrupted, and looping playback in Godot.
FPE Animation panel open alongside the Blender Action Editor
The Animation panel controls how the selected action is exposed to the exported scene.

The traditional Godot workflow

  1. Select the animation in AnimationPlayer.
  2. Add a Call Method Track targeting a stable relay node.
  3. Insert a key at the exact moment and call a method such as animation_event(&"FOOTSTEP").
  4. Have that relay emit a signal or dispatch the named event to the owning character or scene.
  5. Test forward, looping, blended, and interrupted playback.
signal frame_event(event_id: StringName)

func animation_event(event_id: StringName) -> void:
    frame_event.emit(event_id)
FPE Frame Events panel with DOOR_LATCHED at frame 42
A named frame event marks the gameplay moment without putting Godot implementation details into the animation.

Why use a relay?

A method track can call any method, but directly calling delete_enemy() or load_next_level() makes the animation difficult to reuse. Calling one stable relay with a named event keeps the clip portable. It also gives you one place to log, ignore stale events, or translate authored names into gameplay commands.

Common mistakes

  • Expecting preview calls: Godot does not execute method-track calls while previewing in the editor.
  • Destructive immediate callbacks: deferred method-call mode is safer when events modify the scene tree or animation player.
  • Polling the current frame: fast playback and frame-rate changes can skip equality checks.
  • Forgetting interruption: decide whether cancelling an attack also clears its pending hit window.

Godot reference: Animation track types