Unity导入FBX自动进行动画切分
2015-09-23 13:23
696 查看
本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接:http://blog.csdn.net/cartzhang/article/details/48678217
作者:cartzhang
本文内容关于Unity导入带动画模型的动画切分手动处理动画分割
在导入FBX模型过程中,若带有动画呢,需要对它进行切分。当然这个工作可以在Unity中完成。
比如:
这样手动来分割进行。
自动动画切分
这就需要代码了。把代码保存成cs文件,然后放在Editor文件夹中。若没有此文件夹,就自己创建一个!
代码如下:
// FbxAnimListPostprocessor.cs : Use an external text file to import a list of // splitted animations for FBX 3D models. // // Put this script in your "Assets/Editor" directory. When Importing or // Reimporting a FBX file, the script will search a text file with the // same name and the ".txt" extension. // File format: one line per animation clip "firstFrame-lastFrame loopFlag animationName" // The keyworks "loop" or "noloop" are optional. // Example: // 0-50 loop Move forward // 100-190 die using UnityEngine; using UnityEditor; using System.Collections; using System.IO; using System.Text.RegularExpressions; using System; using System.IO; public class FbxAnimListPostprocessor : AssetPostprocessor { public void OnPreprocessModel() { if (Path.GetExtension(assetPath).ToLower() == ".fbx" && !assetPath.Contains("@")) { try { string fileAnim; if (DragAndDrop.paths.Length <= 0) { return; } fileAnim = DragAndDrop.paths[0]; string ClipText = Path.ChangeExtension(fileAnim, ".txt"); StreamReader file = new StreamReader(ClipText); string sAnimList = file.ReadToEnd(); file.Close(); // if (EditorUtility.DisplayDialog("FBX Animation Import from file", fileAnim, "Import", "Cancel")) { System.Collections.ArrayList List = new ArrayList(); ParseAnimFile(sAnimList, ref List); ModelImporter modelImporter = assetImporter as ModelImporter; //modelImporter.clipAnimations. = true; modelImporter.clipAnimations = (ModelImporterClipAnimation[]) List.ToArray(typeof(ModelImporterClipAnimation)); EditorUtility.DisplayDialog("Imported animations", "Number of imported clips: " + modelImporter.clipAnimations.GetLength(0).ToString(), "OK"); } } catch { } // (Exception e) { EditorUtility.DisplayDialog("Imported animations", e.Message, "OK"); } } } void ParseAnimFile(string sAnimList, ref System.Collections.ArrayList List) { Regex regexString = new Regex(" *(?<firstFrame>[0-9]+) *- *(?<lastFrame>[0-9]+) *(?<loop>(loop|noloop| )) *(?<name>[^\r^\n]*[^\r^\n^ ])", RegexOptions.Compiled | RegexOptions.ExplicitCapture); Match match = regexString.Match(sAnimList, 0); while (match.Success) { ModelImporterClipAnimation clip = new ModelImporterClipAnimation(); if (match.Groups["firstFrame"].Success) { clip.firstFrame = System.Convert.ToInt32(match.Groups["firstFrame"].Value, 10); } if (match.Groups["lastFrame"].Success) { clip.lastFrame = System.Convert.ToInt32(match.Groups["lastFrame"].Value, 10); } if (match.Groups["loop"].Success) { clip.loop = match.Groups["loop"].Value == "loop"; } if (match.Groups["name"].Success) { clip.name = match.Groups["name"].Value; } List.Add(clip); match = regexString.Match(sAnimList, match.Index + match.Length); } } }
怎么使用呢?
在你的FBX同目录文件夹下,创建一个txt文件,名字与FBX文件同名即可。
txt内容,为 每个动画的起始帧和结束帧,是否循环播放,和帧名。
CowGirl_Ani.txt
0-50 loop Move forward 100-190 die
把FBX文件拖入到Unity的资源中,可以看到弹出对话框。选择Import导入,就会自动弹出分割动画的数量。
若点击cancle ,就会直接导入动画,而不会分割动画。
引用网址:http://wiki.unity3d.com/index.php/FbxAnimListPostprocessor
thx!
-----------------------
若有问题,请随时联系!
非常感谢各位浏览!
相关文章推荐
- 所谓的Unity多线程
- unity5 人皮渲染 Skin Shading
- 最近用unity5弄的一些渲染
- Unity3D学习笔记(十八)使用插件NGUI制作小地图
- Unity API理解注释
- Unity3D PoolManager缓冲池插件
- Unity Animation
- unity3d实现场景小地图制作
- unity3d实现Loading进度条异步加载场景
- Unity3d报告奇怪的错误CompareBaseObjectsInternal can only be called from the main thread.
- unity3d 学习笔记四 skybox(天空盒) light(光源) halo(光晕)
- Unity3D学习笔记(十二)预制
- Unity3D学习笔记(十)物理引擎:碰撞器
- Unity3D学习笔记(八) 动画编辑器(animation窗口)
- unity3D剪裁
- unity3d 学习笔记(七) 类的基本函数学习
- Unity3D之Mecanim动画系统学习笔记(六):使用脚本控制动画
- Unity中做放大镜 效果
- 蛮牛精选七款Unity插件
- Unity3D中鼠标旋转物体