コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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;
        }
コード例 #4
0
        public static void CreateAsset()
        {
            AnimationClipPreprocessorSettings ais = ScriptableObject.CreateInstance <AnimationClipPreprocessorSettings>();

            AssetDatabase.CreateAsset(ais, "Assets/" + ais.name + ".asset");
            AssetDatabase.SaveAssets();
            EditorUtility.FocusProjectWindow();
            Selection.activeObject = ais;
        }
コード例 #5
0
        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);
        }