在Unity中修改Fbx中的动画文件
来源:互联网 发布:unity3d导入贴图 编辑:程序博客网 时间:2024/05/14 08:57
在Unity中修改Fbx中的动画文件
背景
- Unity导入fbx格式分为Avatar model、 Animation fbx
- 为了进行骨架加点优化,将所有的model都选用了GameObject optimied ,所有的childer Transform 在hierarchy中不可见
- 在animator controller中看到的所有animationclip中的节点都是丢失的,并且animationclip是readOnly的,不能修改
- 不能在Ediotr中拖动animationclip来实现动画预览
需求
- 能够在Editor中通过拖动animationClip来进行动画预览
- 能够简单的编辑AnimationClip中的动画节点,例如:拖动,删除,增加
- 对animtor controller逻辑无影响
流程
- 打开AnimationClip Helper Window
- 选中当前需要操作的Avatar
- 选中当前Avator的动画文件对应的fbx目录–【修改为直接选取一个Animator Controller】
controller = FindController(AssetDatabase.GetAssetPath(animatorFolder)); if (null != controller) { AnimatorController ac = controller as AnimatorController; AnimatorStateMachine sm = (ac != null ? ac.layers[0].stateMachine : null);//这里只考虑第一层,因为不需要有多层 int count = (sm != null ? sm.states.Length : 0); for (int i = 0; i < count; i++) { Motion mt = sm.states[i].state.motion; if (mt != null) {
- 将所有的动画fbx中的Animation Clip段copy到一个新的目录【do Once】
private AnimationClip CreateMotion(Motion mt) { AnimationClip sourceClip = mt as AnimationClip; string path = AssetDatabase.GetAssetPath(sourceClip); path = Path.Combine(Path.GetDirectoryName(path), sourceClip.name) + ".anim"; string newPath = newAnimClipsPath + "/" + sourceClip.name + ".anim"; AnimationClip newClip = new AnimationClip(); EditorUtility.CopySerialized(sourceClip, newClip); newClip = Compress(newClip); AssetDatabase.CreateAsset(newClip, newPath); return newClip; } static AnimationClip Compress(AnimationClip clip) { AnimationClipCurveData[] curves = AnimationUtility.GetAllCurves(clip); Keyframe key; Keyframe[] keyFrames; foreach (AnimationClipCurveData curveDate in curves) { 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; clip.SetCurve(curveDate.path, curveDate.type, curveDate.propertyName, curveDate.curve); } return clip; }
- 重新绑定animator controller中的Animation Clip的引用
- 修改当前的avator的GameObject optimied选项为false
string path = AssetDatabase.GetAssetPath(animator.avatar); ModelImporter model = AssetImporter.GetAtPath(path) as ModelImporter; if (model.optimizeGameObjects != optimized) { model.optimizeGameObjects = optimized; AssetDatabase.ImportAsset(path); }
- 在hierarchy中创建当前角色mesh的GameObject
- 打开Animation编辑器,因为取消了Avatar的Gameobject Optimied选项,所以当前的Animation Clip是可见与可编辑的
- 切换Avatar时,删除Hierarchy中的Avatar GameObject,
- 修改Avatar的GameObject Optimied选项为true【重新optimied的时候,虽然不能在Editor模式下直接预览Animation Clip了,但是在RunTIme模式下,Animator Controller还是能够正常运行的!】
优化
- 因为所有的Animation Clip是Copy出来的,已经与美术提供的动画Fbx文件解除绑定,所以如果美术重新修改了Fbx的动画片段,那么对应的AnimationClip需要自己手动修改
- 把之前的AnimationClip的文件md5信息记录下来,当资源re-import的时候,如果md5信息变化了,则提示用户修改!
- 能否自动修改?这个比较复杂
0 0
- 在Unity中修改Fbx中的动画文件
- Unity 修改FBX模型动画
- Unity3D修改FBX文件动画名
- 3dsMax导出到unity的fbx文件丢失动画
- Unity3d修改FBX文件的动画名方法
- Unity与FBX--为什么使用FBX文件
- Unity与FBX--为什么使用FBX文件
- 修改动画FBX代码工具
- Unity 导入 fbx 模型文件
- Unity3d:读取FBX中的动画
- Unity中FBX动作提取
- Unity导入FBX自动进行动画切分
- Unity导入FBX自动进行动画切分
- Unity运行时读取FBX文件插件
- Unity Fbx
- 关于在3dmax 导入再导出FBX到unity中的尺寸选项问题
- Unity3D如何使用fbx动画文件
- unity 3.5以上导入fbx无法播放动画
- 用OpenCV实现Photoshop算法(二): 图像剪切
- libevent,libcurl 以及php扩展libevent,php curl_multi_exec区别
- 计算机网络-概述
- hadoop + hbase环境安装配置
- 数据结构-循环顺序队(C语言)
- 在Unity中修改Fbx中的动画文件
- 聊聊SpringBoot | 第一章:快速搭建SpringBoot第一个应用
- 智能手机总共有多少种解锁图案(c++版本)
- [LeetCode] 148. Sort List
- supervisor安装和配置
- hadoop + hbase架构和源码分析
- 随笔录
- iOS UICollectionView cell 0间距问题的解决与分割线的设置
- 学习笔记:插入排序的C++、JavaScript、Java实现