用途
该技能面向 Godot 引擎的 2D 动画开发,提供专家级实现模式与决策指导。它覆盖基于 AnimatedSprite2D 的逐帧精灵动画、基于 AnimationPlayer 的轨道动画、基于 AnimationTree 的状态机与混合、基于 Tween 的程序化动画,以及基于 Skeleton2D 的剪纸(cutout)绑定与 IK。技能以“禁止事项”和“脚本索引”为核心组织方式,强调在实现具体模式前必须阅读对应脚本,脚本是唯一事实来源。
主要能力
技能明确列出多项强制约束:
- 禁止使用 AnimatedTexture,因其已废弃、在现代渲染器中效率低下,未来版本可能移除;应改用 AnimatedSprite2D 或 AnimationPlayer。
- 禁止让多个 Tween 争抢同一属性,后创建的 Tween 会强制优先;应把 Tween 赋给变量,并在创建新实例前对旧实例调用 kill()。
- 禁止在物理 tick 之外处理运动学移动;若 AnimationPlayer 移动 CharacterBody2D,其回调模式须设为 Physics,否则会破坏固定时间步物理插值并导致卡顿。
- 禁止对循环动画使用 animation_finished,该信号只在非循环动画上触发;循环检测应使用 animation_looped。
- 禁止在调用 play() 后期待立即状态变化,AnimatedSprite2D 会在下一个处理帧应用 play();若需同步更新属性(如同时切换动画与 flip_h),应在 play() 后立即调用 advance(0)。
- 禁止在保留动画进度时直接设置 frame,因为设置 frame 会把 frame_progress 重置为 0.0;应使用 set_frame_and_progress(frame, progress) 在剪辑中途切换动画时保持平滑过渡。
- 禁止忘记缓存 @onready var anim_sprite,节点查找 getter 在 _physics_process() 等热路径中相当慢,应始终使用 @onready。
- 禁止将 AnimationPlayer 轨道与代码驱动的 AnimatedSprite2D 混用,每个精灵应只选一种动画权威,混用会导致闪烁和状态冲突。
- 禁止使用纸片般薄的骨架进行变形,2D 网格需要均衡的顶点密度;若网格变形不佳,应在 Mesh2D 编辑器中增加关节附近的顶点数。
技能附带脚本索引,每个脚本对应一种模式:
- one_frame_sync_fix.gd — 黄金同步路径:play() + advance(0) 配合 flip_h / 属性变更。
- animation_state_sync.gd — 状态驱动动画 + 过渡队列。
- animation_sync.gd — 方法轨道、信号编排、混合空间钩子。
- animation_tree_step.gd — AnimationNodeStateMachinePlayback.travel()。
- procedural_squash_stretch.gd — 物理驱动的挤压/拉伸唯一来源(不要在此重新实现落地检测)。
- tween_lifecycle_manager.gd — 杀死/复用 Tween;防止属性争抢。
- skeleton_2d_rig_helper.gd — FABRIK/CCDIK 栈、静止姿势。
- shader_hook.gd — AnimationPlayer → ShaderMaterial uniform。
- gpu_mesh_optimizer.gd — 精灵 → 紧凑 2D 网格以优化填充率。
- multimesh_swarm_anim.gd — 仅 GPU 群体运动。
- animation_data_extractor.gd — 值/方法轨道,将碰撞盒/生成元数据与 SpriteFrames 视觉解耦。
- procedural_walker_2d.gd — 通过射线投射目标实现 TwoBoneIK 脚部着地(与 skeleton_2d_rig_helper.gd 配对)。
- sprite_sheet_memory_manager.gd — 线程化高分辨率帧注入 + 卸载,应对 VRAM 峰值。
技能还提供“不要加载”对照表,按场景指定应加载与不应加载的脚本,例如单角色/玩家场景加载 one_frame_sync_fix.gd、animation_state_sync.gd,可选 animation_tree_step.gd / tween_lifecycle_manager.gd,而不加载 multimesh_swarm_anim.gd、gpu_mesh_optimizer.gd(除非填充率分析要求)。
使用方式
技能以决策树形式指导选择动画工具:
- 孤立、纯逐帧精灵表 → AnimatedSprite2D;无法动画非视觉属性或方法轨道,需要时应升级到 AnimationPlayer。
- 剪纸动画、非视觉同步、音频/粒子 → AnimationPlayer;拥有变换、网格变形、方法/值轨道。
- 复杂状态机、混合、移动 → AnimationTree;在 AnimationPlayer 之上的逻辑图,通过 animation_tree_step.gd 使用 travel()。
- 程序化、动态、即发即弃的 UI/特效 → Tween;运行时目标,始终通过 tween_lifecycle_manager.gd。
- 数千实体的群体 → MultiMeshInstance2D + Shader;只加载 multimesh_swarm_anim.gd,跳过角色同步脚本。
黄金路径“一帧同步”示例:
# After any play() that must match flip/modulate/etc. this frame:
anim.flip_h = dir < 0
anim.play(&"run")
anim.advance(0) # force pose now
程序化挤压与拉伸:不要将落地片段粘贴到代理中,唯一来源是 procedural_squash_stretch.gd,包含冲击挤压、速度拉伸、lerp 恢复,需与 godot-characterbody-2d / godot-2d-physics 配对以获取地面/速度权威。
快速路由:Tween 中断/闪烁循环 → tween_lifecycle_manager.gd;AnimationTree travel → animation_tree_step.gd(先 start 再 travel);IK 脚部着地 → skeleton_2d_rig_helper.gd + SkeletonModification2DTwoBoneIK 文档;填充率/群体 → gpu_mesh_optimizer.gd / multimesh_swarm_anim.gd;像素过滤/共享 SpriteFrames → 官方文档,通过 preload 保持资源共享。
适用场景
技能适用于:单角色/玩家动画、帧事件/碰撞盒/音效同步、挤压拉伸游戏手感、剪纸/IK 肢体、动画上的着色器闪烁/溶解、数千蝙蝠/鱼/道具的群体动画。
限制
资料未提供该技能的具体收费、价格、平台或效果信息。技能本身依赖 Godot 引擎及其官方文档,并列出前置技能(godot-animation-player、godot-characterbody-2d、godot-signal-architecture)、互补技能(godot-animation-tree-mastery、godot-tweening、godot-shaders-basics、godot-2d-physics、godot-state-machine-advanced、godot-particles、godot-adapt-3d-to-2d)以及下游消费者(godot-genre-platformer、godot-genre-fighting、godot-resource-data-patterns)。