Unity - 通过降低精度减少动画文件的大小
2017-03-30 17:52
246 查看
Animation是Unity中的动画文件,主要内容由一个个关键帧数据构成。通过将Unity的资源序列化方式调整为Text,就可以以文本方式查看动画文件。
通过菜单项Edit -> Project Settings -> Editor打开Editor Settings窗口,就可以设置资源序列化方式:
下图展示了我对一个Cube制作的动画,动画中包含了若干个关键帧,调整了Cube的坐标位置和旋转方向:
以文本方式打开动画文件,部分内容如下:
动画文件的序列化格式不在我们的讨论范围内,本文我们主要讨论的是通过降低精度来减少动画文件的大小。通过查看动画文件,我们发现Unity在序列化动画文件时使用的浮点精度比较高,可以到小数点后面很多位。因此,通过降低精度我们就可以减少动画文件的大小。
这里我们使用python脚本来实现该功能,处理的逻辑如下:
1. 读取动画文件中的每一行
2. 对于读取到的每一行,去除行尾的换行符
3. 使用"空格"作为分隔符,分隔行内容
4. 对于分隔后的每一个内容,使用正则表达式查询是否包含浮点数据
5. 如果包含浮点数据,则使用四舍五入法保留小数点3位。如果不包含浮点数据,则直接写入到输出文件
下面是python代码,可以根据需要自行调整:
通过降低精度调整后,动画文件如下:
通过降低精度的调整,我们将大小为19.2KB的动画文件降低到了18.3KB。看上去很微不足道,这是因为这个动画文件仅仅包含了13帧动画数据,对于真实项目中成百上千帧的动画文件,节省量是很客观的。以133秒的动画文件为例,大小从8MB降低到了3MB。
通过菜单项Edit -> Project Settings -> Editor打开Editor Settings窗口,就可以设置资源序列化方式:
下图展示了我对一个Cube制作的动画,动画中包含了若干个关键帧,调整了Cube的坐标位置和旋转方向:
以文本方式打开动画文件,部分内容如下:
动画文件的序列化格式不在我们的讨论范围内,本文我们主要讨论的是通过降低精度来减少动画文件的大小。通过查看动画文件,我们发现Unity在序列化动画文件时使用的浮点精度比较高,可以到小数点后面很多位。因此,通过降低精度我们就可以减少动画文件的大小。
这里我们使用python脚本来实现该功能,处理的逻辑如下:
1. 读取动画文件中的每一行
2. 对于读取到的每一行,去除行尾的换行符
3. 使用"空格"作为分隔符,分隔行内容
4. 对于分隔后的每一个内容,使用正则表达式查询是否包含浮点数据
5. 如果包含浮点数据,则使用四舍五入法保留小数点3位。如果不包含浮点数据,则直接写入到输出文件
下面是python代码,可以根据需要自行调整:
import re animFile = open("Move.anim") outputFile = open("NewMove.anim", "w", newline='\n') for l in animFile.readlines(): # 读取文件中的每一行 line = l.rstrip() # 对于读取到的每一行,去除行尾的换行符 words = line.split(' ') # 使用"空格"作为分隔符,分隔行内容 for word in words: match = re.match("-?\d+\.\d+", word) # 对于分隔后的每一个内容,使用正则表达式查询是否包含浮点数据 # 如果包含浮点数据,则使用四舍五入法保留小数点3位。如果不包含浮点数据,则直接写入到输出文件 if match: value = match.group(0) floatValue = float(value) outputFile.write(word.replace(value, str(round(floatValue, 3)))) else: outputFile.write(word) if word != words[-1]: outputFile.write(' ') outputFile.write('\n')
通过降低精度调整后,动画文件如下:
通过降低精度的调整,我们将大小为19.2KB的动画文件降低到了18.3KB。看上去很微不足道,这是因为这个动画文件仅仅包含了13帧动画数据,对于真实项目中成百上千帧的动画文件,节省量是很客观的。以133秒的动画文件为例,大小从8MB降低到了3MB。
相关文章推荐
- unity性能优化之降低动画文件的大小
- unity 打包IPA,减少文件大小的方法
- Optimizilla中文在线无损压缩JPG、PNG图片,不降低画质有效减少图片文件大小
- Android通过减少图片以降低apk大小
- unityios开发--unity3d 发布到ios平台 项目工程文件大小优化
- silverlight通过应用缓存来减少XAP包的大小--DLL动态加载
- CSS语法缩写规则,减少CSS文件的大小【转帖】
- Unity Application Block--通过配置文件读取映射
- 控制网页文件大小通过精简CSS实现
- 通过URL获取文件的大小
- 通过$Bitmap元文件计算NTFS分区的使用空间大小
- 通过文件路径获得文件大小
- C#减少图片文件大小和尺寸
- 3种减少Flex文件大小的方法
- 通过文件指针来获取文件的大小(fseek与ftell函数 )
- 通过_stat结构体获取文件大小
- 控制网页文件大小通过精简CSS实现
- 通过客户端验证上传图片文件大小的ASP源码
- Flex 中通过程序控制编译后的SWF文件属性,包括大小,背景色等。
- Java获得文件大小的方法(通过FileInputStream)