SuperAPI AI 工具集

tweening

设计与创作

查看项目

更新于 10-16 22:43

技能介绍

Tweening 是一份面向 Godot 引擎的补间(Tween)动画技能蓝图,主题是“用程序化方式实现平滑运动”,覆盖属性动画、缓动曲线、链式调用与生命周期管理。

用途 该技能用于在 Godot 项目中通过 Tween 系统实现平滑的属性过渡、UI 效果、相机移动以及游戏“手感”(juice)。它强调用代码而非逐帧手写逻辑来驱动动画。

主要能力

  • 属性动画:使用 tween_property 对单个属性做过渡,例如淡出 modulate:a、移动 position:x / position:y。
  • 链式调用:多个 tween_property 默认按顺序依次执行,可组合成序列动画。
  • 回调与间隔:tween_callback 可在动画后执行函数(如打印提示、queue_free 删除节点);tween_interval 可插入等待时间。
  • 缓动函数:通过 set_ease 与 set_trans 设置缓动与过渡曲线,资料给出常见组合,如 EASE_IN + TRANS_QUAD(加速)、EASE_OUT + TRANS_QUAD(减速)、EASE_IN_OUT + TRANS_CUBIC(平滑 S 曲线)、EASE_OUT + TRANS_BOUNCE(弹跳)。
  • 高级模式:set_loops 实现无限循环;set_parallel(true) 让多个属性同时动画。
  • 附带脚本:juice_manager.gd,是一个基于 Tween 的手感系统,提供可复用的效果预设(弹跳、抖动、脉冲等)。

使用方式 在 Godot 脚本中通过 create_tween() 创建 Tween,再调用 tween_property、tween_callback、tween_interval 等方法。资料给出多个示例:

  • 基础:var tween := create_tween(); tween.tween_property(self, "position", Vector2(100, 100), 2.0)。
  • 淡出:tween.tween_property($Sprite, "modulate:a", 0.0, 1.0)。
  • 回调:tween.tween_callback(func(): print("Animation done!")) 与 tween.tween_callback(queue_free)。
  • 间隔:先淡出 0.5 秒,tween_interval(1.0) 等待 1 秒,再淡入 0.5 秒。
  • 缓动:tween.set_ease(Tween.EASE_IN_OUT); tween.set_trans(Tween.TRANS_CUBIC)。
  • 循环:tween.set_loops() 后 tween_property($Sprite, "rotation", TAU, 2.0)。
  • 并行:tween.set_parallel(true) 后同时动画 position 与 scale。
  • UI 按钮悬停:mouse_entered 时缩放到 Vector2(1.1, 1.1),mouse_exited 时恢复 Vector2.ONE,时长 0.2 秒。
  • 数字计数器:用 tween_method 把 Label 文本从当前值过渡到目标值。
  • 相机平滑跟随:在 _process 中用 tween_property 把 global_position 过渡到目标位置,时长 1.0 / follow_speed。

适用场景 适合 Godot 游戏与交互项目中的 UI 悬停/过渡效果、数值滚动、相机跟随、以及需要“手感”反馈的弹跳、抖动、脉冲等效果。

限制与注意事项 资料明确列出若干“绝不要做”的规则:

  • 创建新 Tween 前必须先 kill 旧 Tween,否则会内存泄漏并产生冲突动画。
  • 不要在 _process 中每帧 create_tween(),否则会产生大量 Tween 对象;应创建一次并复用,或先 kill 旧的。
  • 需要同时动画时必须先 set_parallel(true),因为链式 tween_property 默认是顺序执行。
  • 不要用 0 时长的 Tween 做瞬时变化,直接设置属性即可。
  • 不要忽略 finished 信号,应在完成时做清理或置空引用。
  • 不要对 UI 使用线性插值(TRANS_LINEAR),会显得机械,应使用 EASE_OUT + TRANS_QUAD 或 EASE_IN_OUT + TRANS_CUBIC。 常见问题:节点被移除时 Tween 会停止,可用 get_tree().create_tween() 绑定到 SceneTree;多个冲突 Tween 应使用单个 Tween 或先 kill 旧的。

其它 该技能的具体安装方式、收费与价格、支持平台等信息暂未提供。