- Home /
Automatically duplicate animation from imported file
Been trying to figure this out for a few days now and have hit a roadblock in my script. I am trying to import in multiple Maya baked animations files, each file has a single animation on it, and trying to put them on one character all automatically. I am using the AssetPostprocessor class and OnPreprocessModel() function and get about 90% of the way there but the last part I want it to automatically do is duplicate the animation clip from the import and put it in the animation folder.
public void OnPreprocessModel()
{
ModelImporter modelImporter = (ModelImporter) assetImporter;
modelImporter.globalScale = 1;
modelImporter.animationWrapMode = UnityEngine.WrapMode.Loop;
modelImporter.animationPositionError = 0.05f;
modelImporter.animationRotationError = 0.05f;
modelImporter.animationScaleError = 0.05f;
\\ This part I cannot figure out
ModelImporterClipAnimation[] anim = new ModelImporterClipAnimation[0];
modelImporter.clipAnimations = anim;
AnimationClip bob = (AnimationClip) modelImporter.clipAnimations;
Debug.Log(anim);
}
I have tried to find the name of the imported animation, but have constantly gotten errors.
Answer by ricardo_arango · Mar 21, 2012 at 01:20 AM
You can try this script:
using UnityEngine;
using UnityEditor;
using System.IO;
public class DuplicateAnimations : AssetPostprocessor {
void OnPostprocessModel (GameObject g) {
Animation anim = g.GetComponent <Animation> ();
AnimationClip[] clips = AnimationUtility.GetAnimationClips (anim);
foreach( AnimationClip clip in clips ){
DuplicateAnimationClip(clip);
}
}
void DuplicateAnimationClip (AnimationClip sourceClip){
if (sourceClip != null)
{
string path = AssetDatabase.GetAssetPath(sourceClip);
path = Path.Combine(Path.GetDirectoryName(path), sourceClip.name) + ".anim";
string newPath = AssetDatabase.GenerateUniqueAssetPath (path);
AnimationClip newClip = new AnimationClip();
EditorUtility.CopySerialized(sourceClip, newClip);
AssetDatabase.CreateAsset(newClip, newPath);
}
}
}
Answer by eangulee · Aug 12, 2014 at 11:56 AM
string path = AssetDatabase.GetAssetPath(sourceClip); but when Debug.Log(path), I found path is empty,you should think of other ways
Your answer
Follow this Question
Related Questions
How do you add AnimClips at import time correctly? 1 Answer
Rename a clip using AssetPostProcessor 1 Answer
is it possible to have a global/static variable in the AssetPostprocessor script 1 Answer
Create/Edit an AnimatorController using a script 0 Answers
missing mesh after creating prefab inside AssetPostprocessor . OnPostprocessModel () 1 Answer