Unity - 通过降低精度减少动画文件的大小

Animation是Unity中的动画文件,主要内容由一个个关键帧数据构成。通过将Unity的资源序列化方式调整为Text,就可以以文本方式查看动画文件。
通过菜单项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。

时间: 2024-12-22 07:43:42

Unity - 通过降低精度减少动画文件的大小的相关文章

怎样压缩pdf 减少pdf文件的大小

一些PDF文件包含图片内容比较多,这种PDF文件往往所占存储特别大,即使在网络较好的情况下要传输这些文件也还是需要用很长时间才可以发送完毕.而且文件过大,往往在打开浏览文件时会卡顿,各种操作响应不及时.如果遇到这种情况,我们也可以对pdf文件进行压缩,来先减少pdf文件的大小,这样文件发送就简单多了. 方法.步骤: 首先是都会想到的将文件压缩成一个压缩包.这样确实是可以减小文件,传输文件也比较方便.但是文件解压后还是原来那么大,而对于有些大的文件在打开浏览时会有卡顿现象,而且不能很顺畅的进行翻页

如何减少PDF文件的大小

http://blog.csdn.net/pipisorry PDF文件图文并茂,十分耐看.但是这些美观的PDF文件往往很大,即使是用最好的电子邮件服务也要花费很长时间才能够发送成功.但如果遇到这种情况,你也可以采取各种办法来减小文件的大小.请继续阅读. 方法 1: 使用PDF转换器 1 下载PDF转换器.PrimoPDF是最受欢迎的PDF转换 器之一,可以从开发者的网站上免费下载.该软件可以用来创建PDF文档,也可以压缩PDF文件的大小.PrimoPDF会在你的系统上安装一个PDF虚拟 打印机

测试Animation大型动画文件拆分播放的可行性

最近遇到一个问题,动画文件大了复杂了之后,每次修改输出很麻烦,导出fbx就需要20分钟再加上unity这边的导入加起来得40分钟左右. 所以我想到了一个比较好的解决方法,在unity这边解决.把动画文件拆分成若干份,然后赋予不同的层并行播放 当要修改某个角色或者某几个角色的动画只要输出一小部分就可以了 为了测试可行性,我使用了一个跑动的模型动画进行测试,一共复制了20分,分别用多层动画(20层)和单个动画来播放,测试性能 单个动画测试结果:(消耗时间2.5毫秒左右,浮动不大比较稳定) 多层动画测

Unity游戏开发——自动为动画剪辑添加事件 之 最后几帧的事件不能被调用的问题

最近在做一个根据配置表自动生成动画剪辑clip以及controller的功能.做法是根据配置表配置的动作以及每个动作的关键帧,自动为每个clip添加事件.这样做可以把动画的事件处理在游戏运行之前就计算好然后存到动画文件.anim中,可以提高游戏的运行效率,如果做的再细点,还可以自定义动画事件的传入的参数.比如act游戏中的多段攻击,这些数据一定是配到表中的,我们可以把表中的数据导入成Unity的ScriptableObject类型,然后打成.asset文件,在把他指定给AnimationEven

android ProgressBar定制模式,自定义模式动画文件

1.indeterminate mode | 没有具体进度的进度条 1.1 定制动画文件[html] view plaincopy <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateDrawable="@drawable/progress_my_style" style=&quo

【译】Unity工程目录中的特殊文件夹

转自: http://wiki.unity3d.com/index.php/Special_Folder_Names_in_your_Assets_Folder Unity中一些特定名字的文件夹有特殊的属性. Hidden Folders Unity会忽略以.起始命名的文件夹(例如 ".UnitTests/",".svn/"),放在这种文件夹中的资源不会被导入到Unity中,脚本也不会被编译,同时在工程视图中无法看到此类型的文件夹. (windows视窗下无法命名为

Unity 3D游戏开发Mecanim动画系统讲解

本期教程和大家分享Mecanim动画系统的重定向特性,Mecanim动画系统是Unity3D推出的全新的动画系统,具有重定向.可融合等诸多新特性,通过和美工人员的紧密合作,可以帮助程序设计人员快速地设计出角色动画.一起跟着人气博主秦元培学习吧! 博主今天想和大家分享的是Mecanim动画系统的重定向特性,众所周知,<仙剑奇侠传>是一部经典的RPG游戏,这部游戏到今天依然焕发着强大的生命力.博主在网上认识了一个制作<仙剑奇侠传>同人游戏的小团队,他们目前正在着手制作一个称为<仙

实习小白::(转) cocos2d-x使用cocosStudio编辑的动画文件

1CocoStudio 简介 CocoStudio 是由 Cocos2d-x 官方推出的一个专门针对 Cocos2d-x 游戏开发的免费工具集,目前正在开发阶段,且日益完善之中!既是工具集,当然集成了现有各零零散散工具的功能,并且不断扩充,包含动画编辑器,UI编辑 器,场景编辑器和数据编辑器.具体内容及其特性欢迎访问 CocoStudio 官网 http://cocostudio.org/ .在这里,我们通过动画编辑器来快速体验一下 CocoStudio 为我们开发带来的便捷~ 2环境搭建与配置

unity Android 打包后读取 xml 文件

问题:    前天在做东西的过程中发现了一个让人很纠结的问题,为什么Unity 程序在PC上测试一点都没问题但是打包发布到Android后却无法读取XML文件. 通过查找自资料发现打包发不到安卓后的路径和PC上测试时的路径发生了变化,因此读取就出bug了. 那么解决方法很简单: 1,建立一个新工程 2,添加两个GUItext组件一个用于显示测试平台另一个用于显示读取到的XML数据, 如下: 3,该贴代码了 //-------------------------------------------