在Unity的API中,AnimationClipSettings.frameRate
是较新版Unity才引入的属性。对于旧版本可以使用以下修改方案:
// 修改CreateTrack方法中的这部分代码:
void CreateTrack(string trackName, List<Sprite> sprites, int offset)
{
// 替换以下两行代码:
// AnimationClipSettings settings = AnimationUtility.GetAnimationClipSettings(animationClip);
// float frameRate = settings.frameRate == 0 ? 60 : settings.frameRate;
// 替换为直接获取动画剪辑的帧率(兼容旧版本)
float frameRate = animationClip.frameRate;
if (frameRate <= 0)
{
frameRate = 60; // 默认帧率
Debug.LogWarning("Using default frame rate 60fps");
}
// 剩余代码保持不变...
}
完整修改后的方法代码:
void CreateTrack(string trackName, List<Sprite> sprites, int offset)
{
float frameRate = animationClip.frameRate;
if (frameRate <= 0)
{
frameRate = 60;
Debug.LogWarning("Using default frame rate 60fps");
}
var binding = new EditorCurveBinding
{
path = "",
type = typeof(SpriteRenderer),
propertyName = "m_Sprite"
};
List<ObjectReferenceKeyframe> keyFrames = new List<ObjectReferenceKeyframe>();
for (int i = 0; i < sprites.Count; i++)
{
float time = (i * frameInterval + offset) / frameRate;
keyFrames.Add(new ObjectReferenceKeyframe
{
time = time,
value = sprites[i]
});
}
AnimationUtility.SetObjectReferenceCurve(animationClip, binding, keyFrames.ToArray());
}
修改说明:
- 移除了对
AnimationClipSettings
的依赖 - 直接使用
animationClip.frameRate
获取帧率属性 - 增加帧率合法性检查(当帧率未设置时默认使用60fps)
- 兼容所有Unity 2017及以上版本
注意: 如果发现帧率设置无效,可以在导入动画剪辑后手动设置:
// 可以在创建动画剪辑时添加这行设置
animationClip.frameRate = 60; // 设置期望的帧率