You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Animation.AddClip()后添加的动画剪辑时长始终为1秒

问题原因与修复方案

核心问题:把帧序号当成了时间参数

你踩了Unity动画系统的一个常见坑——所有时间相关的参数都是秒,不是帧数。你直接用帧序号来设置关键帧时间和拆分区间,导致动画时长计算完全错误,最终所有拆分后的剪辑都被判定为1秒长。

具体修复步骤

1. 创建关键帧时转成秒

KeyFrame的time属性是秒数,不是帧序号。比如你的动画是60帧每秒,第100帧对应的时间是100/60≈1.6667秒,代码要这么写:

float frameRate = 60f; // 你的动画帧率
int targetFrame = 100;
float timeInSeconds = targetFrame / frameRate;
Keyframe keyframe = new Keyframe(timeInSeconds, 你的目标值);

同时别忘了给创建好的AnimationClip设置帧率:

createdAnimationClip.frameRate = frameRate;

2. 拆分剪辑时用秒作为区间

Animation.AddClip的start和end参数也是秒,同样要把帧区间转成秒:

float frameRate = createdAnimationClip.frameRate;
// 0-100帧 → 0 到 100/frameRate 秒
anim.AddClip(createdAnimationClip, "name1", 0f, 100f/frameRate);
// 100-200帧 → 100/frameRate 到 200/frameRate 秒
anim.AddClip(createdAnimationClip, "name2", 100f/frameRate, 200f/frameRate);
// 200-500帧 → 200/frameRate 到 500/frameRate 秒
anim.AddClip(createdAnimationClip, "name3", 200f/frameRate, 500f/frameRate);

3. 验证原始剪辑时长

修复后可以用这段代码确认原始剪辑的时长是否符合预期:

Debug.Log($"原始剪辑时长:{createdAnimationClip.length}秒");

如果时长等于“总帧数/帧率”,说明关键帧设置没问题,拆分后的片段也会有正确的时长。

补充说明

Unity 2021.3.12是LTS稳定版本,这个逻辑没有已知bug,完全是参数单位混淆导致的问题。只要把帧数值转换成秒,就能解决播放时长异常的问题。

内容的提问来源于stack exchange,提问作者Viacheslav M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:52:04