zoukankan      html  css  js  c++  java
  • 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='
    ')
    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('
    ')
    

    通过降低精度调整后,动画文件如下:

    通过降低精度的调整,我们将大小为19.2KB的动画文件降低到了18.3KB。看上去很微不足道,这是因为这个动画文件仅仅包含了13帧动画数据,对于真实项目中成百上千帧的动画文件,节省量是很客观的。以133秒的动画文件为例,大小从8MB降低到了3MB。

  • 相关阅读:
    在Win8下无法打开 hlp 帮助文件的问题
    ftp 终端命令
    为 Macbook 增加锁屏热键技巧
    苹果系统直接读写 ntfs 磁盘
    div 绝对布局居中
    2015-1-11
    unable to load default svn client
    ubuntu eclipse 安装svn
    centos mysq table is read only
    centos ssh 乱码
  • 原文地址:https://www.cnblogs.com/twjcnblog/p/6647368.html
Copyright © 2011-2022 走看看