---
title: "关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题"
author: "石心.Yong"
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/uwa-answer-legacy-animation-compression-rotation-frames/
type: note
content_role: source
source_type: "source"
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/05-游戏图形与运行时/我的UWA问答/2021-05-02 - 关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题.md"
content_hash: d2127ab3ede0c868adf69bbef06976502d836065b4243f4e1910965c8ca2e3d2
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题

> **note · 我的 UWA 问答**
> 本文收录我在 UWA 问答发表的公开回答。问题内容归原提问者；回答保留当时语境，技术结论可能受 Unity 版本、平台和项目条件限制。

## 问题

[如何降低动画文件的浮点数精度](https://answer.uwa4d.com/question/593955b6c42dc04f4d8f7341)

在对Legacy动画采用上述方法进行压缩后，发现使用下面两种插值方式的Rotaion动画都被自动填充了中间的帧

![image.png](/media/93f24bf56f28fa2d115f.png)

压缩前：

![image.png](/media/ad3dbfcfcf50b07a80f9.png)

压缩后：

![image.png](/media/01b2c2e39524f23be89a.png)

请问大家知道产生的原因吗 谢谢各位

- 提问者：Tiki
- 提问时间：2021-05-01 21:47:24

## 我的回答

造成 “填充中间帧” 的问题的原因是Unity对插值的处理，与降低精度的算法没有关系。可以尝试：单纯GetEditorCurve，然后SetEditorCure，不进行修改，依然会存在题主说的“填充中间帧”的问题。

![image.png](/media/70334fbdf0b9ae40786e.png)

要理解这个问题的原因，需要理解Unity对Rotation的处理方式。Rotation在Unity内部都是用Quaternion处理的，即使动画资源与内存中存储的是欧拉角(Eular)。官方的说法：“Unity has to convert rotation values to Quaternions eventually, since the engine only works with Quaternions.”

而AnimationClip的插值方式的三个选项，实质上是如下含义：

- Eular Angles - 欧拉角插值，AnimationClip资源中存的是欧拉角，运行时插值后转为四元数
- Quaternion - 四元数插值，AnimationClip中存四元数，运行时插值
- Eular Angles(Quaternion) - 欧拉角插值，并把插值后的角度值烘焙(Bake)成Quaternion，存到资源文件中

使用Eular Angles(Quaternion) 的方式，可以在AnimationClip文件中看到曲线的字段如下：localEulerAnglesBaked

![image.png](/media/16eeaadc2103854b31e5.png)

这种情况，资源本身占用的内存会增大：

![image.png](/media/06cd3cca0853850e3aa3.png)

这就是使用Eular Angles(Quaternion)方式插值，中间的帧都出现的原因，引擎把插值结果烘焙到了资源中。而GetEditorCurve和SetEditorCurve后在能看到插值的效果，只是因为Get/Set之后，Unity把数据显示到了引擎当中。

参考：

https://docs.unity3d.com/Manual/animeditor-AnimationCurves.html

https://docs.unity3d.com/Manual/AnimationEulerCurveImport.html

- 回答时间：2021-05-02 08:45:20
- 最后更新：2021-05-02 10:01:45
- 采纳状态：已采纳

## 来源与关系

- 上位集合：[我的 UWA 问答](https://www.pystone.net/notes/my-uwa-answers/)
- UWA 标签：资源管理
- 原始问题：[关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题](https://answer.uwa4d.com/question/608ceb6c6bb31032f97914bd)
- 源页最后更新：2021-05-03 01:05:00
