手動處理動畫分割
在導入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
把FBX文件拖入到Unity的資源中,可以看到彈出對話框。選擇Import導入,就會自動彈出分割動畫的數量。
若點擊cancle ,就會直接導入動畫,而不會分割動畫。