Godot Animation

作者 gamedev-skillsd4b0e35550c5無授權條款1.3K 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫11 天前更新

Animate in Godot 4.7 three ways: AnimationPlayer for keyframed clips (incl. call and signal tracks), AnimationTree with state machines and blend spaces for character animation, and Tween for short procedural/UI tweens via create_tween(). Use when working with AnimationPlayer/AnimationTree nodes in a .tscn, blending character states, sprite-sheet animation, or code-driven Tweens.

AI 產生的概覽

指導在 Godot 4.7 中選擇與操作動畫工具:AnimationPlayer 片段、AnimationTree 混合與程式碼 Tween。

功能
這個技能說明在 Godot 4.7 中如何在 AnimationPlayer(關鍵影格片段)、AnimationTree(狀態機與混合空間)與 Tween(短時間的程序性或 UI 插值)之間做選擇。它提供 GDScript 範例,涵蓋播放並等待片段、在狀態之間切換、依二維參數混合移動動畫,以及對 UI 屬性做補間。它也列出常見陷阱,例如 AnimationTree 未啟用、參數路徑寫錯,以及 3.x 中已移除的 API,並指向一份參考文件以取得更完整的內容。
適用情境
適用於處理 .tscn 場景中的 AnimationPlayer 或 AnimationTree 節點、混合走路/跑步/待機等角色狀態、製作精靈表動畫,或撰寫由程式碼驅動的 Tween。不適用於移動邏輯、UI 版面配置或著色器效果。
執行需求
需要 Godot 4.7 與 GDScript 知識。這個技能不附程式碼腳本,只有指示說明與一份參考文件。

Godot Animation (4.x)

Choose and drive the right animation tool: AnimationPlayer (clips), AnimationTree (blending/state machines), or Tween (short procedural moves). Targets Godot 4.7.

When to use

  • Use when playing keyframed animations, blending walk/run/idle states, animating a sprite sheet, or tweening UI/objects in code.

When not to use: the movement logic that decides which state to play → godot-2d-movement; UI layout (vs. UI tweening) → godot-ui-control; shader-driven effects → godot-shaders.

Core workflow

  1. Pick the tool:
    • AnimationPlayer — author keyframed clips (transforms, properties, method calls, audio, even other animations). The source of truth for clip data.
    • AnimationTree — blend and transition between those clips at runtime with a state machine and/or blend spaces. Needs an AnimationPlayer to pull clips from.
    • Tween — fire-and-forget procedural interpolation in code (create_tween()); ideal for UI pops, fades, and one-off moves.
  2. For 2D sprite sheets: use AnimatedSprite2D + SpriteFrames, or keyframe the frame property in an AnimationPlayer.
  3. For characters: build clips in AnimationPlayer, then add an AnimationTree (active = true), set its anim_player, and design an AnimationNodeStateMachine or AnimationNodeBlendSpace2D as the tree root.
  4. Drive transitions from code via the playback object (travel) or by setting blend parameters.
  5. React to clip events with the animation_finished signal and call/method tracks.

Patterns

1. AnimationPlayer: play a clip and await it

gdscript
@onready var anim: AnimationPlayer = $AnimationPlayer
func attack() -> void:    anim.play("attack")    await anim.animation_finished     # resume after the clip ends    anim.play("idle")

2. AnimationTree state machine: travel between states

gdscript
@onready var tree: AnimationTree = $AnimationTree
func _ready() -> void:    tree.active = true                # the tree drives animation; AnimationPlayer is the source
func set_state(state: StringName) -> void:    # The playback object controls an AnimationNodeStateMachine root.    var sm: AnimationNodeStateMachinePlayback = tree.get("parameters/playback")    sm.travel(state)                  # transitions using the graph's connections
func _physics_process(_d: float) -> void:    set_state(&"run" if velocity.length() > 5.0 else &"idle")

3. Blend space: blend run direction by a 2D parameter

gdscript
# Root is an AnimationNodeBlendSpace2D named "Move" with idle/run points placed in it.func update_locomotion(input_dir: Vector2) -> void:    # Parameter path = "parameters/<node name>/blend_position".    tree.set("parameters/Move/blend_position", input_dir)

4. Tween: fade and scale a UI element (code-driven)

gdscript
func pop_in(node: Control) -> void:    node.scale = Vector2.ZERO    node.modulate.a = 0.0    var tw := create_tween()                          # bound to this node's tree    tw.set_parallel(true)                             # run the two tweens together    tw.tween_property(node, "scale", Vector2.ONE, 0.2) \      .set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT)    tw.tween_property(node, "modulate:a", 1.0, 0.2)   # sub-property via ":"

Pitfalls

  • AnimationTree.active left false → nothing animates and travel() appears to do nothing. Set active = true and assign the anim_player path.
  • Wrong parameter path. Blend/condition paths are "parameters/<NodeName>/..." and must match the node names in the tree exactly (e.g. "parameters/playback", "parameters/Move/blend_position"). A typo silently no-ops.
  • AnimationPlayer and AnimationTree fighting. When an AnimationTree is active, don't also call AnimationPlayer.play() for the same tracks — let the tree own playback.
  • 3.x Tween node is gone. There is no Tween node to add in 4.x; create tweens in code with create_tween() (which returns a Tween). They auto-start and free themselves.
  • Reusing a finished tween. A tween is one-shot; call create_tween() again for a new animation. Use set_loops() for repetition.
  • yield/yield(anim, "...") is gone. Use await anim.animation_finished.
  • Sub-property tweens use a colon: "modulate:a", "position:x". Tweening the whole property instead overwrites siblings.

References

  • For state machine transitions/conditions, root motion, one-shot/blend nodes, method & call tracks, SpriteFrames/AnimatedSprite2D, and Tween easing/chaining/callbacks, read references/animation-tree-and-tween.md.

Related skills

  • godot-2d-movement — supplies the velocity/state that selects animations.
  • godot-ui-control — UI that Tweens animate.
  • godot-3d-essentials — 3D character scenes driven by AnimationTree.
  • game-ai — state machines that mirror animation states.

來源與署名

來源:gamedev-skills/awesome-gamedev-agent-skills位於skills/godot/godot-animation提交d4b0e35

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架