在使用 Unity3d 倒入Fbx模型的時候,動畫的動畫片段需要自己手動添加模型多了以后會是一個不小的工作量。
Unity3d支持 編輯器腳本來控制資源導入的過程。添加一個 AssetPostprocessor 監聽其中的 OnPreprocessModel 方法,在其中使用 ModelImporter 的 clipAnimations 屬性來為導入的動畫添加動畫片段。
我的項目中美術給的模型中,按類型划分,每一個類型都有一套動畫。我是采用的方法是 分別將不同類型的模型放置到不同的文件夾,通過路徑來判斷應該添加什么樣的動畫片段。這里如果你的項目中實現了Unity3d中讀取策划填寫的表格的話其實也是可以的。這里就不展開了。
ModelImporter 的 clipAnimations 屬性 接收的是一個定長的數組。這里我封裝了一個管理器類用於提供一個更簡潔、代碼更少的方法創建該數組。
完整代碼如下:
2using System.Collections;
3 using UnityEditor;
4 using System.Collections.Generic;
5
6 public class AnimModelSet : AssetPostprocessor
7 {
8 void OnPreprocessModel()
9 {
10
11 if (assetPath.Contains("FirstPlayers"))
12 {
13 ModelImporter textureImporter = assetImporter as ModelImporter;
14 editorImporterUtil.clipArrayListCreater creater = new editorImporterUtil.clipArrayListCreater();
15 creater.addClip("idle", 0, 50, true, WrapMode.Loop);
16 textureImporter.clipAnimations = creater.getArray();
17 }
18 }
19 }
20
21 namespace editorImporterUtil
22 {
23 public class clipArrayListCreater
24 {
25 private List<ModelImporterClipAnimation> clipList = new List<ModelImporterClipAnimation>();
26 public void addClip(string name, int firstFrame, int lastFrame, bool loop, WrapMode wrapMode)
27 {
28 ModelImporterClipAnimation tempClip = new ModelImporterClipAnimation();
29 tempClip.name = name;
30 tempClip.firstFrame = firstFrame;
31 tempClip.lastFrame = lastFrame;
32 tempClip.loop = loop;
33 tempClip.wrapMode = wrapMode;
34 clipList.Add(tempClip);
35 }
36
37 public ModelImporterClipAnimation[] getArray()
38 {
39 return clipList.ToArray();
40 }
41 }
42
43 }