导入fbx人物动画read

您所在的位置:网站首页 动画疯付费方案 导入fbx人物动画read

导入fbx人物动画read

2023-09-20 08:39| 来源: 网络整理| 查看: 265

原文链接: http://answers.unity3d.com/questions/8172/how-to-add-new-curves-or-animation-events-to-an-im.html

unity4.3版本

using UnityEditor; using UnityEngine; using System.IO; using System.Collections; public class MultipleCurvesTransferer { const string duplicatePostfix = "Edit"; const string animationFolder = "Animations"; static void CopyClip(string importedPath,string copyPath) { AnimationClip src = AssetDatabase.LoadAssetAtPath(importedPath,typeof(AnimationClip)) as AnimationClip; AnimationClip newClip = new AnimationClip(); newClip.name = src.name + duplicatePostfix; AssetDatabase.CreateAsset(newClip,copyPath); AssetDatabase.Refresh(); } [MenuItem("PATOOL/Transfer Multiple Clips Curves to Copy")] static void CopyCurvesToDuplicate() { // Get selected AnimationClip Object[] imported = Selection.GetFiltered(typeof(AnimationClip),SelectionMode.Unfiltered); if(imported.Length == 0) { Debug.LogWarning("Either no objects were selected or the objects selected were not AnimationClips."); return; } //If necessary, create the animations folder. if(Directory.Exists("Assets/" + animationFolder) == false) { AssetDatabase.CreateFolder("Assets",animationFolder); } foreach(AnimationClip clip in imported) { string importedPath = AssetDatabase.GetAssetPath(clip); //If the animation came from an FBX, then use the FBX name as a subfolder to contain the animations. string copyPath; if(importedPath.Contains(".fbx") || importedPath.Contains(".FBX")) { //With subfolder. string folder = importedPath.Substring(importedPath.LastIndexOf("/") + 1,importedPath.LastIndexOf(".") - importedPath.LastIndexOf("/") - 1); if(!Directory.Exists("Assets/Animations/" + folder)) { AssetDatabase.CreateFolder("Assets/Animations",folder); } copyPath = "Assets/Animations/" + folder + "/" + clip.name + duplicatePostfix + ".anim"; } else { //No Subfolder copyPath = "Assets/Animations/" + clip.name + duplicatePostfix + ".anim"; } Debug.Log("CopyPath: " + copyPath); CopyClip(importedPath,copyPath); AnimationClip copy = AssetDatabase.LoadAssetAtPath(copyPath,typeof(AnimationClip)) as AnimationClip; if(copy == null) { Debug.Log("No copy found at " + copyPath); return; } // Copy curves from imported to copy AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(clip); EditorCurveBinding[] binds = AnimationUtility.GetObjectReferenceCurveBindings(clip); binds = AnimationUtility.GetCurveBindings(clip); AnimationCurve curve = null; foreach(EditorCurveBinding item in binds) { curve = AnimationUtility.GetEditorCurve(clip,item); AnimationUtility.SetEditorCurve(copy,item,curve); } Debug.Log("Copying curves into " + copy.name + " is done"); } } }

方法1:

You can use an editor script that copies over the curves from the original imported Animation Clip into the duplicated Animation Clip.

Here is such an editor script.

Place it in a folder called Editor, located somewhere inside the Assets folder.The script assumes that you have already made a duplicate of the imported clip and called it the same name but with a *copy postfix. For example, if you have an imported clip called MyAnimation, it will search for *MyAnimation_copy*.Select the original imported Animation Clip in the Project View.You can now use the menu Assets -> Transfer Clip Curves to Copy

And the script:

using UnityEditor;using UnityEngine;using System.Collections; public class CurvesTransferer {  const string duplicatePostfix = "_copy";  [MenuItem ("Assets/Transfer Clip Curves to Copy")] static void CopyCurvesToDuplicate () { // Get selected AnimationClip AnimationClip imported = Selection.activeObject as AnimationClip; if (imported == null) { Debug.Log("Selected object is not an AnimationClip"); return; }  // Find path of copy string importedPath = AssetDatabase.GetAssetPath(imported); string copyPath = importedPath.Substring(0, importedPath.LastIndexOf("/")); copyPath += "/" + imported.name + duplicatePostfix + ".anim";  // Get copy AnimationClip AnimationClip copy = AssetDatabase.LoadAssetAtPath(copyPath, typeof(AnimationClip)) as AnimationClip; if (copy == null) { Debug.Log("No copy found at "+copyPath); return; }  // Copy curves from imported to copy AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(imported, true); for (int i=0; iconst string duplicatePostfix = "_copy"; static void CopyClip(string importedPath, string copyPath){ AnimationClip src = AssetDatabase.LoadAssetAtPath(importedPath, typeof(AnimationClip)) as AnimationClip; AnimationClip newClip = new AnimationClip(); newClip.name = src.name + duplicatePostfix; AssetDatabase.CreateAsset(newClip, copyPath); AssetDatabase.Refresh();} [MenuItem("Assets/Transfer Clip Curves to Copy")]static void CopyCurvesToDuplicate(){ // Get selected AnimationClip AnimationClip imported = Selection.activeObject as AnimationClip; if (imported == null) { Debug.Log("Selected object is not an AnimationClip"); return; }  // Find path of copy string importedPath = AssetDatabase.GetAssetPath(imported); string copyPath = importedPath.Substring(0, importedPath.LastIndexOf("/")); copyPath += "/" + imported.name + duplicatePostfix + ".anim";  CopyClip(importedPath, copyPath);  AnimationClip copy = AssetDatabase.LoadAssetAtPath(copyPath, typeof(AnimationClip)) as AnimationClip; if (copy == null) { Debug.Log("No copy found at " + copyPath); return; } // Copy curves from imported to copy AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(imported, true); for (int i = 0; i const string duplicatePostfix = "Edit";const string animationFolder = "Animations"; static void CopyClip(string importedPath, string copyPath) { AnimationClip src = AssetDatabase.LoadAssetAtPath(importedPath, typeof(AnimationClip)) as AnimationClip; AnimationClip newClip = new AnimationClip(); newClip.name = src.name + duplicatePostfix; AssetDatabase.CreateAsset(newClip, copyPath); AssetDatabase.Refresh();}  [MenuItem("Assets/Transfer Multiple Clips Curves to Copy")] static void CopyCurvesToDuplicate() { // Get selected AnimationClip Object[] imported = Selection.GetFiltered(typeof(AnimationClip), SelectionMode.Unfiltered); if (imported.Length == 0) { Debug.LogWarning("Either no objects were selected or the objects selected were not AnimationClips."); return; }  //If necessary, create the animations folder. if (Directory.Exists("Assets/" + animationFolder) == false) { AssetDatabase.CreateFolder("Assets", animationFolder); }  foreach (AnimationClip clip in imported) {    string importedPath = AssetDatabase.GetAssetPath(clip);  //If the animation came from an FBX, then use the FBX name as a subfolder to contain the animations. string copyPath; if (importedPath.Contains(".fbx")) { //With subfolder. string folder = importedPath.Substring(importedPath.LastIndexOf("/") + 1, importedPath.LastIndexOf(".") - importedPath.LastIndexOf("/") - 1); if (!Directory.Exists("Assets/Animations/" + folder)) { AssetDatabase.CreateFolder("Assets/Animations", folder); } copyPath = "Assets/Animations/" + folder + "/" + clip.name + duplicatePostfix + ".anim"; } else { //No Subfolder copyPath = "Assets/Animations/" + clip.name + duplicatePostfix + ".anim"; }  Debug.Log("CopyPath: " + copyPath);  CopyClip(importedPath, copyPath);  AnimationClip copy = AssetDatabase.LoadAssetAtPath(copyPath, typeof(AnimationClip)) as AnimationClip; if (copy == null) { Debug.Log("No copy found at " + copyPath); return; } // Copy curves from imported to copy AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(clip, true); for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3