跳到主要内容

关键帧、动作片段与循环

动画可以看成 属性 = f(时间)。关键帧保存某些时刻的属性值,曲线插值决定它们之间如何变化。

帧与秒​

24 fps 下,相隔 24 帧的关键帧相隔 1 秒。Blender 源工程的帧号不一定从 0 开始,导出器可以把动作时间平移到 0。片段时长应看实际采样时间范围,不直接把“帧数”除以帧率而忽略首尾关系。

金币的 16 张独立帧以 24 fps 播放,一轮约 0.667 秒;机器人从第 1 帧到第 25 帧,在 24 fps 下相隔 1 秒。前者是离散图片播放,后者是随时间采样骨骼变换。

插值会改变动作性格​

Constant/常量插值保持前值;Linear/线性插值保持区间变化率;Bezier/贝塞尔插值可以缓入缓出。匀速转动金币通常希望角度按时间均匀变化,不能无意中每圈都加速减速。

Euler 角存在旋转顺序与跨角度边界的问题;Quaternion/四元数适合表示空间旋转,但关键帧连续性与插值仍需检查。不要把更换旋转模式当作所有扭转问题的自动修复。

Action 与 NLA​

Action/动作组织一组动画数据,NLA/非线性动画用于组织、混合和重用动作。Blender 4.5 还涉及动作槽等数据结构,旧版脚本直接遍历 action.fcurves 的方式未必适用所有动作。

导出器如何选择动作由导出模式与设置决定。使用短而明确的片段名,例如 idle、walk、attack,并在导出文件内检查实际片段。一个动作在时间轴能播放,不代表导出设置必然把它包含进去。

循环不是“首尾一样”这么简单​

首尾姿态一致可减少接缝,但速度变化也可能造成明显顿挫。需要观察至少三个连续循环。序列帧通常不重复保存闭合帧,避免首尾同姿态被播放两次;骨骼片段通常保留闭合采样,并让播放器按 Loop 模式重复。

glTF 动画描述数据,不规定游戏播放器必须循环。Cocos 中仍应显式设置片段 WrapMode。

原地动作与根运动​

In-place/原地行走只改变肢体姿态,外层游戏节点控制前进。Root Motion/根运动把位移写进动作,游戏要决定如何提取或使用,避免动画与脚本重复移动。

本指南使用原地行走。输入、寻路、碰撞、角色坐标与动画速度由游戏管理。脚滑可由步幅、播放速度、移动速度或地面接触问题引起,不能只看单帧。

制作1秒原地walk循环,24fps,动作名walk。
根节点不前进,首尾姿态一致,并检查连续三次循环。
报告导出的片段名、时长、通道,以及引擎Loop设置。

官方阅读:关键帧、Actions。