unity從模型中抽取動畫文件(animation)

http://www.cnblogs.com/leng-yuye/archive/2013/01/11/2856144.html

由于模型是由第三方的軟件制作的,用unity不能直接編輯模型里的動畫文件(read-ony),比如為動畫綁定事件,所以要把模型中的動畫文件抽取出來,這樣文件是可寫的了。

usingUnityEditor;

usingUnityEngine;

usingSystem.IO;

publicclassCurvesTransferer

{

[MenuItem("Character?Generator/Transfer?Clip?Curves?to?Copy")]

staticvoidCopyClip()

{

foreach(Object?oinSelection.GetFiltered(typeof(Object),?SelectionMode.DeepAssets))

{

if(!(oisGameObject))continue;

if(!o.name.Contains("@"))continue;

GameObject?animationFBX?=?(GameObject)o;

AnimationClip?srcClip?=?animationFBX.animation.clip;

AnimationClip?newClip?=newAnimationClip();

newClip.name?=?srcClip.name;

//?Create?directory?to?store?generated?materials.

if(!Directory.Exists(AnimationsPath(animationFBX)))

Directory.CreateDirectory(AnimationsPath(animationFBX));

stringanimationPath?=?AnimationsPath(animationFBX)?+?newClip.name?+".anim";

AssetDatabase.CreateAsset(newClip,?animationPath);

AssetDatabase.Refresh();

AnimationClipCurveData[]?curveDatas?=?AnimationUtility.GetAllCurves(srcClip,true);

for(inti?=?0;?i?<?curveDatas.Length;?i++)

{

AnimationUtility.SetEditorCurve(newClip,?curveDatas[i].path,?curveDatas[i].type,?curveDatas[i].propertyName,?curveDatas[i].curve);

}

}

}

//?Returns?the?path?to?the?directory?that?holds?the?specified?FBX.

staticstringCharacterRoot(GameObject?character)

{

stringroot?=?AssetDatabase.GetAssetPath(character);

returnroot.Substring(0,?root.LastIndexOf('/')?+?1);

}

//?Returns?the?path?to?the?directory?that?holds?materials?generated

//?for?the?specified?FBX.

publicstaticstringAnimationsPath(GameObject?character)

{

returnCharacterRoot(character)?+"Copy?Animations/";

}

}

文章轉載,如有侵權請小窗。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容