Unity3D动作资源(AnimatinClip)优化
能做到去掉Scale曲线,降低浮点精度
- using System;
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEditor;
- public static class RemoveAnimationClipScale
- {
- [MenuItem("Tools/Animation/Remove Animation Clip Scale")]
- public static void RemoveAnimationClipScaleMenu()
- {
- int i = 0;
- int total = 0;
- try
- {
- EditorUtility.DisplayProgressBar("Remove Animation Clip Scale", "Collecting Animation Clip", 0);
- var gos = EnumAssets.EnumInCurrentSelection<UnityEngine.AnimationClip>();
- total = gos.Count();
- if (total > 0)
- {
- foreach (var go in gos)
- {
- EditorUtility.DisplayProgressBar("Remove Animation Clip Scale", go.name, i * 1.0f / total);
- OnPostprocessAnimation(go);
- i++;
- }
- }
- }
- catch (Exception)
- {
- }
- finally
- {
- EditorUtility.ClearProgressBar();
- AssetDatabase.Refresh();
- AssetDatabase.SaveAssets();
- Debug.Log("Tools/Animation/Optimize Animation: total[" + total + "]");
- }
- }
- static void OnPostprocessAnimation(AnimationClip theAnimation)
- {
- try
- {
- //去除scale曲线
- foreach (EditorCurveBinding theCurveBinding in AnimationUtility.GetCurveBindings(theAnimation))
- {
- string name = theCurveBinding.propertyName.ToLower();
- if (name.Contains("scale"))
- {
- AnimationUtility.SetEditorCurve(theAnimation, theCurveBinding, null);
- }
- }
- //浮点数精度压缩到f3
- AnimationClipCurveData[] curves = null;
- curves = AnimationUtility.GetAllCurves(theAnimation);
- Keyframe key;
- Keyframe[] keyFrames;
- for (int ii = 0; ii < curves.Length; ++ii)
- {
- AnimationClipCurveData curveDate = curves[ii];
- if (curveDate.curve == null || curveDate.curve.keys == null)
- {
- //Debug.LogWarning(string.Format("AnimationClipCurveData {0} don't have curve; Animation name {1} ", curveDate, animationPath));
- continue;
- }
- keyFrames = curveDate.curve.keys;
- for (int i = 0; i < keyFrames.Length; i++)
- {
- key = keyFrames[i];
- key.value = float.Parse(key.value.ToString("f3"));
- key.inTangent = float.Parse(key.inTangent.ToString("f3"));
- key.outTangent = float.Parse(key.outTangent.ToString("f3"));
- keyFrames[i] = key;
- }
- curveDate.curve.keys = keyFrames;
- theAnimation.SetCurve(curveDate.path, curveDate.type, curveDate.propertyName, curveDate.curve);
- }
- }
- catch (Exception e)
- {
- Debug.LogError(string.Format("CompressAnimationClip Failed !!! animationPath : {0} error: {1}", theAnimation.name, e));
- }
- }
- }
Unity3D动作资源(AnimatinClip)优化的更多相关文章
- Unity 打包总结和资源的优化和处理
1. Texture,都去掉alpha通道,作为背景展示的图片,基本都没有透明要求,有特殊要求的则放到atlas里面 a. Loading图这类需要比较精细的,则把图片设置为Automatic Tru ...
- Unity3d Web3d资源的动态加载
Unity3d Web3d资源的动态加载 @灰太龙 参考了宣雨松的博客,原文出处http://www.xuanyusong.com/archives/2405,如果涉及到侵权,请通知我! Unity3 ...
- Unity3d代码及效率优化总结
1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标GPU与CPU. 2.如果你用U3D自带的SHADER,在表现不差的情况下选择Mobile或Unli ...
- Intel64及IA-32架构优化指南第8章多核与超线程技术——8.9 其它共享资源的优化
8.9 其它共享资源的优化 在多线程应用中的资源优化依赖于处理器拓扑层级内相关联的Cache拓扑以及执行资源.在第7章中讨论了处理器拓扑以及标识处理器拓扑的一种软件算法. 在带有共享总线的平台中,总线 ...
- Unity3D移动端内存优化(NGUI方面)
Unity3D引擎技术交流QQ群:[21568554] 做3d移动端内存一直是人们头疼的问题,载入的资源释放了,还有其它的须要释放.比方ngui释放,事实上主要是NGUI的Texture和Spr ...
- Unity3D 的大场景内存优化
我们公司的一个 MMORPG 项目最近在内存方面碰到了红线,昨天开会讨论了一下.我提出了一个改进方案,写篇 blog 记录一下. 问题是这样的.在当下的手机及平板硬件设备条件下,操作系统留给应用的可用 ...
- 跟我从零基础学习Unity3D开发--资源打包篇(AssetBundle)
好久没更新了,一直在加班敢项目进度.这里和关注我的博客的童鞋表示一下歉意!这里有我录的Unity3D从零开始的视频教程大家可以关注一下:http://www.imooc.com/view/555 视 ...
- unity3d 加密资源并缓存加载
原地址:http://www.cnblogs.com/88999660/archive/2013/04/10/3011912.html 首先要鄙视下unity3d的文档编写人员极度不负责任,到发帖为止 ...
- 详谈 Unity3D AssetBundle 资源加载,结合实际项目开发实例
第一次搞资源更新方面,这里只说更新,加载,AssetBundle资源加载,谈谈自己的理解,以及自己在项目中遇到的那些神坑,现在回想一下,真的是自己跪着过来的,说多了,都是泪. 我这边是安卓AssetB ...
随机推荐
- Write operations are not allowed in read-only mode 只读模式下(FlushMode.NEVER/MANUAL)写操作不允
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read ...
- fdisk mkfs blkid fstab
fdisk -l 查看系统分区信息 mkfs 制作文件系统mke2fs 制作ext型文件系统mkntfs 制作ntfs型文件系统 e2label 更改ext型文件系统卷标ntfslabel 更 ...
- storm学习之七-storm UI页面参数详解
http://lbxc.iteye.com/blog/1522318 --参考文章 http://blog.csdn.net/rong_89/article/details/39473917 --参考 ...
- kafka_2.10-0.8.1.1.tgz的1或3节点集群的下载、安装和配置(图文详细教程)绝对干货
运行kafka ,需要依赖 zookeeper,你可以使用已有的 zookeeper 集群或者利用 kafka自带的zookeeper. 单机模式,用的是kafka自带的zookeeper, 分布式模 ...
- zabbix监控系列(5)之通过trap模式监控网络设备
- 怎么安装ABBYY FineReader
ABBYY FineReader是市场领先的文字识别(OCR)软件,可快速方便地将扫描纸质文档.PDF文件和数码相机的图像转换成可编辑.可搜索信息,ABBYY FineReader 12是目前最新版本 ...
- 通过Nginx反向代理,IIS和apache 共用80端口
#user nobody; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error ...
- C#静态构造函数调用机制
https://blog.csdn.net/cjolj/article/details/56329230 若一个类中有静态构造函数,在首次实例化该类或任何的静态成员被引用时,.NET自动调用静态构造函 ...
- 已知大小分别为m、n的两个无序数组A、B和一个常数c,求满足A[i]+B[j]=c的所有A[i]和B[j]
方法一:枚举法.该方法是最容易.也是最简单的方法,枚举出数组A和数组B中所有的元素对,判断其和是否为c,如果是,则输出. 方法二:排序+二分查找法.首先,对两个数组中长度较大数组,不妨设为A,排序:然 ...
- cordova开发ios炸鸡
cordova/lib/copy-www-build-step.sh: Permission denied 解决办法: cd platforms/ios/cordova/lib sudo chmod ...