- Home /
How to configure an animation by script during import?
Hi every body!
I try to improve our animation importing process by using post/pre processor script on the FBX importer.
In fact, I am currently able to change the global animation import parameter like "animationCompression", "animationType", etc. But when I try to access the "clipAnimations" property, the array is empty... How could I get an access to the imported animations?
I spend my morning searching through the several animation importer threads/answers and I found nothing about changing the default import parameter of an animation with a post process function... I am sure that I have missed some "answer" or forum thread which describe what I try to archive but no way to find them. Could anybody pointed me the way?
Here is my current Pre/Post processor :
private void OnPreprocessModel()
{
UnityEditor.ModelImporter importer = this.assetImporter as UnityEditor.ModelImporter;
importer.animationCompression = UnityEditor.ModelImporterAnimationCompression.Off;
importer.animationType = UnityEditor.ModelImporterAnimationType.Human;
importer.generateAnimations = UnityEditor.ModelImporterGenerateAnimations.GenerateAnimations;
UnityEngine.Debug.Log("clipAnimations : " + importer.clipAnimations.Length);
UnityEngine.Debug.Log("referencedClips : " + importer.referencedClips.Length);
}
private void OnPostprocessModel(UnityEngine.GameObject gameObject)
{
UnityEditor.ModelImporter importer = this.assetImporter as UnityEditor.ModelImporter;
UnityEngine.Debug.Log("clipAnimations : " + importer.clipAnimations.Length);
UnityEngine.Debug.Log("referencedClips : " + importer.referencedClips.Length);
for (int index = 0; index < importer.clipAnimations.Length; ++index)
{
UnityEngine.Debug.Log("Animation : " + importer.clipAnimations[index].name);
importer.clipAnimations[index].keepOriginalOrientation = true;
importer.clipAnimations[index].keepOriginalPositionXZ = true;
importer.clipAnimations[index].keepOriginalPositionY = true;
importer.clipAnimations[index].lockRootHeightY = true;
importer.clipAnimations[index].lockRootPositionXZ = true;
importer.clipAnimations[index].lockRootRotation = true;
}
}
Thanks in advance for any hints!
Cheers! Flo
Answer by hyagogow · Apr 25, 2016 at 04:29 AM
For Human types animations, you must use importer.defaultClipAnimations to get all animations.
By the way, defaultClipAnimations is a property, so you need first assign it to a local variable. After that you may change their values and reassign the local variable to importer.clipAnimations.
Here a example where I set loop for all animations which has loop in the name:
private void OnPostprocessModel(GameObject gameobject) {
ModelImporterClipAnimation[] animations = importer.defaultClipAnimations;
foreach (ModelImporterClipAnimation animation in animations)
{
Debug.Log("Animation : " + animation.name);
animation.keepOriginalOrientation = true;
animation.keepOriginalPositionXZ = true;
animation.keepOriginalPositionY = true;
animation.lockRootHeightY = true;
animation.lockRootPositionXZ = true;
animation.lockRootRotation = true;
if (animation.name.Contains("Loop") ||
animation.name.Contains("loop"))
animation.loopTime = true;
}
importer.clipAnimations = animations;
}
Your answer
Follow this Question
Related Questions
Can I make animations snap to a frame? 1 Answer
Evaluate AnimationClip 0 Answers
Problem using mecanim and the Animation process 0 Answers
problems with pressing a button to run the animation. 0 Answers
Trim animation to remove middle 1 Answer