public static AnimationClipPreprocessorSettings FindParentSettings(string assetPath) { string search = "t:" + typeof(AnimationClipPreprocessorSettings).Name; Debug.Log("Type: " + search); string[] ais_guids = AssetDatabase.FindAssets(search); string assetDir = System.IO.Path.GetDirectoryName(System.IO.Path.Combine(Application.dataPath, assetPath)); AnimationClipPreprocessorSettings res = null; int pathSize = int.MinValue; foreach (string ais_guid in ais_guids) { string ais_path = AssetDatabase.GUIDToAssetPath(ais_guid); string settingAssetDir = System.IO.Path.GetDirectoryName(System.IO.Path.Combine(Application.dataPath, ais_path)); if (settingAssetDir.Length >= pathSize && assetDir.StartsWith(settingAssetDir)) { pathSize = settingAssetDir.Length; res = (AnimationClipPreprocessorSettings)AssetDatabase.LoadAssetAtPath(ais_path, typeof(AnimationClipPreprocessorSettings)); } } return(res); }
AnimationClip CreateCopyWithDefaultEvents(AnimationClip sourceClip, AnimationClipPreprocessorSettings ais) { if (sourceClip != null) { string path = AssetDatabase.GetAssetPath(sourceClip); path = System.IO.Path.Combine(ais.GetOutputPath(), sourceClip.name) + ".anim"; AnimationClip existingClip = (AnimationClip)AssetDatabase.LoadAssetAtPath(path, typeof(AnimationClip)); if (existingClip != null) { Debug.LogWarning("Overwriting existing clip, shoud copy existing animation events(?)"); } //string newPath = AssetDatabase.GenerateUniqueAssetPath(path); AnimationClip newClip = new AnimationClip(); List <AnimationEvent> _events = new List <AnimationEvent>(); foreach (AnimationClipPreprocessorSettings.DefaultAnimationEvent dae in ais.defaultAnimationEvents) { AnimationEvent ev = new AnimationEvent(); ev.functionName = dae.ParseEventName(); if (ev.functionName.Contains("custom")) { ev.stringParameter = dae.event_name; } ev.time = dae.relative_time * sourceClip.length; _events.Add(ev); } EditorUtility.CopySerialized(sourceClip, newClip); AssetDatabase.CreateAsset(newClip, path); AnimationUtility.SetAnimationEvents(newClip, _events.ToArray()); return(newClip); } return(null); }
void OnPreprocessModel() { AnimationClipPreprocessorSettings ais = AnimationClipPreprocessorSettings.FindParentSettings(assetPath); if (ais == null) { return; } ModelImporter modelImporter = assetImporter as ModelImporter; modelImporter.importAnimation = true; modelImporter.resampleCurves = true; modelImporter.animationCompression = ModelImporterAnimationCompression.KeyframeReduction; modelImporter.animationRotationError = ais.rotationError; modelImporter.animationPositionError = ais.positionError; modelImporter.animationScaleError = ais.scaleError; modelImporter.animationType = ModelImporterAnimationType.Generic; if (ais.defaultAvatar != null) { modelImporter.sourceAvatar = ais.defaultAvatar; } modelImporter.importMaterials = ais.importMaterials; }
public static void CreateAsset() { AnimationClipPreprocessorSettings ais = ScriptableObject.CreateInstance <AnimationClipPreprocessorSettings>(); AssetDatabase.CreateAsset(ais, "Assets/" + ais.name + ".asset"); AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); Selection.activeObject = ais; }
void OnPostprocessAnimation(GameObject go, AnimationClip clip) { Debug.Log("Post anim: " + clip.name + " in " + assetPath); AnimationClipPreprocessorSettings ais = AnimationClipPreprocessorSettings.FindParentSettings(assetPath); if (ais == null) { return; } //AnimationClip clipCopy = CreateCopyWithDefaultEvents(clip, ais); }