Exemple #1
0
        private AnimationClip CreateAnimation(Anim a, Sprite[] Sprites, string enemyName, string pngPath)
        {
            AnimationClip clip            = new AnimationClip();
            float         FramesPerSecond = 1000f / a.milliPerFrame;

            clip.frameRate = FramesPerSecond;

            EditorCurveBinding curveBinding = new EditorCurveBinding();

            curveBinding.type         = typeof(Image);
            curveBinding.path         = "";
            curveBinding.propertyName = "m_Sprite";

            ObjectReferenceKeyframe[] keyframes = new ObjectReferenceKeyframe[Sprites.Length];
            for (int i = 0; i < Sprites.Length; i++)
            {
                keyframes[i]       = new ObjectReferenceKeyframe();
                keyframes[i].time  = i / FramesPerSecond;
                keyframes[i].value = Sprites[i];
            }

            AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, keyframes);
            clip.wrapMode = WrapMode.Loop;

            string saveLocation = Path.Combine(Path.GetDirectoryName(pngPath), enemyName + a.name + ".anim");

            AssetDatabase.CreateAsset(clip, saveLocation);

            return(clip);
        }
        public static void GenerateClipImageLayer(ImportContext ctx, string childPath, List <Sprite> frameSprites)
        {
            foreach (var tag in ctx.file.frameTags)
            {
                AnimationClip clip = ctx.generatedClips[tag];

                int duration  = 0;  // store accumulated duration of frames.  on each loop iteration will have the start time of the cur frame, in ms
                var keyFrames = new ObjectReferenceKeyframe[tag.to - tag.from + 2];
                for (int i = tag.from; i <= tag.to; ++i)
                {
                    var aseFrame = ctx.file.frames[i];
                    keyFrames[i - tag.from] = new ObjectReferenceKeyframe {
                        time  = duration * 0.001f,  // aesprite time is in ms, convert to seconds
                        value = frameSprites[aseFrame.frameID]
                    };

                    // add this frame's duration to calculate when the next frame starts
                    duration += aseFrame.duration;
                }

                // Give the last frame an extra keyframe at the end of the animation to give that frame its duration
                keyFrames[keyFrames.Length - 1] = new ObjectReferenceKeyframe {
                    time  = duration * 0.001f - 1.0f / clip.frameRate,  // clip duration in seconds, minus one frame's time
                    value = frameSprites[tag.to]
                };

                var binding = new EditorCurveBinding {
                    path         = childPath,
                    type         = typeof(SpriteRenderer),
                    propertyName = "m_Sprite"
                };

                AnimationUtility.SetObjectReferenceCurve(clip, binding, keyFrames);
            }
        }
Exemple #3
0
            /************************************************************************************************************************/

            /// <summary>Creates and saves a new <see cref="AnimationClip"/> that plays the `sprites`.</summary>
            private static void CreateAnimation(string path, int frameRate, params Sprite[] sprites)
            {
                var clip = new AnimationClip
                {
                    frameRate = frameRate,
                };

                var spriteBinding = new EditorCurveBinding
                {
                    type         = typeof(SpriteRenderer),
                    path         = "",
                    propertyName = "m_Sprite",
                };

                var spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length];

                for (int i = 0; i < sprites.Length; i++)
                {
                    spriteKeyFrames[i] = new ObjectReferenceKeyframe
                    {
                        time  = i / (float)frameRate,
                        value = sprites[i]
                    };
                }

                AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames);

                AssetDatabase.CreateAsset(clip, path);
            }
Exemple #4
0
        private static void OnPostprocessAllAssets(
            string[] importedAssets,
            string[] deletedAssets,
            string[] movedAssets,
            string[] movedFromAssetPaths)
        {
            foreach (string asset in importedAssets)
            {
                Texture2D tex = AssetDatabase.LoadAssetAtPath <Texture2D>(asset);
                if (tex == null)
                {
                    continue;
                }

                SpritesheetMetadata metadata = GetMetadata(asset);
                if (metadata == null)
                {
                    Debug.Log("No spritesheet metadata at postprocess");
                    return;
                }

                int previousStart = 0;
                foreach (Animation anim in metadata.animations)
                {
                    var binding = new EditorCurveBinding
                    {
                        type         = typeof(SpriteRenderer),
                        path         = "",
                        propertyName = "m_Sprite"
                    };
                    Object[] sprites = AssetDatabase.LoadAllAssetRepresentationsAtPath(asset);
                    int      count   = anim.end - previousStart;
                    var      keys    = new ObjectReferenceKeyframe[count];
                    for (int i = 0; i < count; i++)
                    {
                        if (sprites.Length == 0)
                        {
                            break;
                        }

                        keys[i] = new ObjectReferenceKeyframe
                        {
                            time  = (float)i / metadata.frameRate,
                            value = sprites[i + previousStart],
                        };
                    }
                    var clip = new AnimationClip
                    {
                        frameRate = metadata.frameRate,
                    };
                    AnimationUtility.SetObjectReferenceCurve(clip, binding, keys);

                    DirectoryInfo parent = Directory.GetParent(asset);
                    string        path   = Path.Combine(parent.ToString(), string.Format("{0}.anim", anim.name));
                    AssetDatabase.CreateAsset(clip, path);

                    previousStart = anim.end;
                }
            }
        }
    public static void AddSprites(AnimationClip clip, string path, int startIdx, int endIdx, float frameRate)
    {
        Sprite[] sprites = AssetToSpriteArray(path);

        EditorCurveBinding spriteBinding = new EditorCurveBinding();

        spriteBinding.type         = typeof(SpriteRenderer);
        spriteBinding.path         = "";
        spriteBinding.propertyName = "m_Sprite";

        int numFrames = (endIdx - startIdx) + 1;

        ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[numFrames];
        for (int i = 0, idx = startIdx; idx <= endIdx; i++, idx++)
        {
            AnimationKeyTime akt = FrameToAnimationKey(i, frameRate);
            spriteKeyFrames[i]       = new ObjectReferenceKeyframe();
            spriteKeyFrames[i].time  = akt.Time;
            spriteKeyFrames[i].value = sprites[idx];
        }

        AnimationClipSettings clipSettings = new AnimationClipSettings();

        clipSettings.loopTime              = true;
        clipSettings.startTime             = 0f;
        clipSettings.keepOriginalPositionY = true;
        AnimationUtility.SetAnimationClipSettings(clip, clipSettings);

        // This function sets clipSettings.stopTime
        AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames);
    }
    static AnimationClip CreateSpriteAnimation(params Sprite[] sprites)
    {
        var animationClip = new AnimationClip
        {
            frameRate = 12
        };

        var animationClipSettings = new AnimationClipSettings
        {
            loopTime = true
        };

        AnimationUtility.SetAnimationClipSettings(animationClip, animationClipSettings);

        var objectReferenceKeyframes = new ObjectReferenceKeyframe[sprites.Length];

        for (var i = 0; i < objectReferenceKeyframes.Length; i++)
        {
            objectReferenceKeyframes[i] = new ObjectReferenceKeyframe
            {
                value = sprites[i],
                time  = i / animationClip.frameRate
            };
        }

        var editorCurveBinding = EditorCurveBinding.PPtrCurve("", typeof(SpriteRenderer), "m_Sprite");

        AnimationUtility.SetObjectReferenceCurve(animationClip, editorCurveBinding, objectReferenceKeyframes);

        return(animationClip);
    }
Exemple #7
0
    static AnimationClip CreateAnimation(string savePath, Sprite[] sprites)
    {
        AnimationClip         animClip     = new AnimationClip();
        AnimationClipSettings animClipSett = new AnimationClipSettings();

        animClipSett.loopTime = true;
        AnimationUtility.SetAnimationClipSettings(animClip, animClipSett);
        animClip.frameRate = 12;   // FPS

        EditorCurveBinding spriteBinding = new EditorCurveBinding();

        spriteBinding.type         = typeof(SpriteRenderer);
        spriteBinding.path         = "";
        spriteBinding.propertyName = "m_Sprite";
        ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length];
        for (int i = 0; i < (sprites.Length); i++)
        {
            spriteKeyFrames[i]       = new ObjectReferenceKeyframe();
            spriteKeyFrames[i].time  = i;
            spriteKeyFrames[i].value = sprites[i];
        }
        AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames);


        AssetDatabase.CreateAsset(animClip, $"{AnimationSavePath}/{savePath}.anim");
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
        return(animClip);
    }
        private static AnimationClip CreateAnimationClip(SpritesheetData data, SpritesheetAnimationData animationData, UnityEngine.Object[] sprites)
        {
            AnimationClip clip = new AnimationClip {
                frameRate = animationData.frameRate
            };

            Log($"Creating animation clip with frame rate {animationData.frameRate}, frame skip {animationData.frameSkip}, and {animationData.numFrames} total frames", LogLevel.Verbose);

            EditorCurveBinding spriteBinding = new EditorCurveBinding {
                type         = typeof(SpriteRenderer),
                path         = "",
                propertyName = "m_Sprite"
            };

            var keyframes = new ObjectReferenceKeyframe[animationData.numFrames];

            for (int i = 0; i < animationData.numFrames; i++)
            {
                int frameNum = i * (animationData.frameSkip + 1);
                keyframes[i] = new ObjectReferenceKeyframe {
                    time  = ((float)frameNum) / animationData.frameRate,
                    value = sprites[i + animationData.startFrame]
                };
            }

            AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, keyframes);

            return(clip);
        }
        public static void GenerateClipImageLayer(ImportContext ctx, string childPath, List <Sprite> frameSprites)
        {
            foreach (var tag in ctx.file.frameTags)
            {
                AnimationClip clip = ctx.generatedClips[tag];

                int time      = 0;
                var keyFrames = new ObjectReferenceKeyframe[tag.to - tag.from + 2];
                for (int i = tag.from; i <= tag.to; ++i)
                {
                    var aseFrame = ctx.file.frames[i];
                    keyFrames[i - tag.from] = new ObjectReferenceKeyframe {
                        time  = time * 1e-3f,
                        value = frameSprites[aseFrame.frameID]
                    };

                    time += aseFrame.duration;
                }

                keyFrames[keyFrames.Length - 1] = new ObjectReferenceKeyframe {
                    time  = time * 1e-3f - 1.0f / clip.frameRate,
                    value = frameSprites[tag.to]
                };

                var binding = new EditorCurveBinding {
                    path         = childPath,
                    type         = typeof(SpriteRenderer),
                    propertyName = "m_Sprite"
                };

                AnimationUtility.SetObjectReferenceCurve(clip, binding, keyFrames);
            }
        }
Exemple #10
0
    static void GenerateSpriteSheet()
    {
        string[] cmdArgs       = System.Environment.GetCommandLineArgs();
        string   characterName = cmdArgs[cmdArgs.Length - 1];

        Debug.Log(characterName);
        SliceSprite(characterName);
        Sprite[]      sprites  = Resources.LoadAll <Sprite>(string.Concat("sprites/", characterName, "Animation/p1/", characterName));  // load all sprites in "assets/Resources/sprite" folder
        AnimationClip animClip = new AnimationClip();

        animClip.frameRate = frameRate;
        EditorCurveBinding spriteBinding = new EditorCurveBinding();

        spriteBinding.type         = typeof(SpriteRenderer);
        spriteBinding.path         = "";
        spriteBinding.propertyName = "m_Sprite";
        ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length];
        for (int i = 0; i < (sprites.Length); i++)
        {
            spriteKeyFrames[i]       = new ObjectReferenceKeyframe();
            spriteKeyFrames[i].time  = i;
            spriteKeyFrames[i].value = sprites[i];
        }
        AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames);
        AssetDatabase.CreateAsset(animClip, "assets/walk.anim");
        AssetDatabase.SaveAssets();
    }
        void OnPostprocessSprites(Texture2D texture, Sprite[] sprites)
        {
            //PostProcesserUI popup = ScriptableObject.CreateInstance<PostProcesserUI>();
            //popup.ShowUI(texture, sprites, assetImporter as TextureImporter);

            int wanted = sprites.Length;

            ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[wanted];
            for (int i = 0; i < wanted; i++)
            {
                spriteKeyFrames[i] = new ObjectReferenceKeyframe
                {
                    time  = i,
                    value = sprites[i]
                };
            }

            AnimationClip animClip = new AnimationClip {
                frameRate = 30
            };

            AnimationUtility.SetObjectReferenceCurve(animClip, new EditorCurveBinding()
            {
                path = "", propertyName = "sprite", type = typeof(SpriteRenderer)
            }, spriteKeyFrames);

            var resourcesSprites = Resources.LoadAll <Sprite>("Test2");

            spriteKeyFrames[0].value = resourcesSprites[0]; //Loading from resources works fine!!
            AnimatorController ac = AnimatorController.CreateAnimatorControllerAtPathWithClip("assets/mycontroller.controller", animClip);

            AssetDatabase.CreateAsset(animClip, "assets/myanim.anim");
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
        /// <summary>
        /// Adjust the time a specific sprite should be displayed.
        /// </summary>
        /// <returns>An empty String if the renaming was succesfull, otherwise an error specific message.</returns>
        string SetSpriteDisplayTime()
        {
            string notification;

            if (spriteKeyFrames[viewIndex - 1].showingTime >= 0.01f)
            {
                float oldTime = (spriteKeyFrames[viewIndex].frame.time - spriteKeyFrames[viewIndex - 1].frame.time) *
                                asset.frameRate;
                oldTime /= 100;
                float diff = spriteKeyFrames[viewIndex - 1].showingTime - oldTime;
                for (int i = viewIndex; i < spriteKeyFrames.Count; i++)
                {
                    ObjectReferenceKeyframe currentFrame = spriteKeyFrames[i].frame;
                    currentFrame.time        = (currentFrame.time * asset.frameRate) + (diff * 100);
                    currentFrame.time       /= asset.frameRate;
                    spriteKeyFrames[i].frame = currentFrame;
                }

                notification = "Adjustet Times succesfuly, dont forget to save your Animation!";
            }
            else
            {
                notification = "Value must be bigger or equal than 0,01!";
            }

            return(notification);
        }
    private static AnimationClip CreateSpriteSheetAnimation(List <string> frameNames, string path)
    {
        AnimationClip clip = new AnimationClip();

        ObjectReferenceKeyframe[] frames = new ObjectReferenceKeyframe[frameNames.Count];
        for (int i = 0; i < frameNames.Count; i++)
        {
            frames[i].time  = (float)i * (1.0f / (float)animationFPS);
            frames[i].value = AssetDatabase.LoadAssetAtPath <Sprite>(frameNames[i]);
        }

        var curveBinding = new EditorCurveBinding();

        curveBinding.type         = typeof(Image);
        curveBinding.path         = "";
        curveBinding.propertyName = "m_Sprite";

        AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, frames);

        var settings = AnimationUtility.GetAnimationClipSettings(clip);

        settings.loopTime = true;
        AnimationUtility.SetAnimationClipSettings(clip, settings);
        clip.wrapMode = WrapMode.Loop;

        AssetDatabase.CreateAsset(clip, path);

        return(clip);
    }
        private void BuildSpriteChangeCurve(ref AnimationClip clip, KeyValuePair <string, List <SpriteChangeKey> > timeline)
        {
            // First you need to create Editor Curve Binding
            EditorCurveBinding curveBinding = new EditorCurveBinding();

            // I want to change the sprites of the sprite renderer, so I put the typeof(SpriteRenderer) as the binding type.
            curveBinding.type = typeof(SpriteRenderer);

            // Regular path to the GameObject that will be changed
            curveBinding.path = timeline.Key;

            // This is the property name to change the sprite of a sprite renderer
            curveBinding.propertyName = "m_Sprite";

            // An array to hold the object keyframes
            ObjectReferenceKeyframe[] keyFrames = new ObjectReferenceKeyframe[timeline.Value.Count];

            int i = 0;

            foreach (var key in timeline.Value)
            {
                keyFrames[i] = new ObjectReferenceKeyframe();
                // set the time
                keyFrames[i].time = key.Time;
                // set reference for the sprite you want
                keyFrames[i].value = key.Sprite;
                i++;
            }

            AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, keyFrames);
        }
Exemple #15
0
            /************************************************************************************************************************/

            /// <summary>Creates and saves a new <see cref="AnimationClip"/> that plays the `sprites`.</summary>
            private static void CreateAnimation(string path, params Sprite[] sprites)
            {
                var frameRate = AnimancerSettings.NewAnimationFrameRate.floatValue;

                var clip = new AnimationClip
                {
                    frameRate = frameRate,
                };

                var spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length];

                for (int i = 0; i < spriteKeyFrames.Length; i++)
                {
                    spriteKeyFrames[i] = new ObjectReferenceKeyframe
                    {
                        time  = i / (float)frameRate,
                        value = sprites[i]
                    };
                }

                var spriteBinding = EditorCurveBinding.PPtrCurve("", typeof(SpriteRenderer), "m_Sprite");

                AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames);

                AssetDatabase.CreateAsset(clip, path);
            }
Exemple #16
0
        private static AnimationClip CreateAnimationClip(SpriteSheetAnimationData spriteAnimation)
        {
            AnimationClip clip = UnityEditor.Animations.AnimatorController.AllocateAnimatorClip(spriteAnimation.name);

            clip.frameRate = spriteAnimation.framesPerSecond;
            clip.wrapMode  = WrapMode.Loop;

            EditorCurveBinding spriteBinding = new EditorCurveBinding();

            spriteBinding.type         = typeof(SpriteRenderer);
            spriteBinding.path         = "";
            spriteBinding.propertyName = "m_Sprite";
            ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[spriteAnimation.sprites.Length];
            for (int i = 0; i < (spriteAnimation.sprites.Length); i++)
            {
                //Added security check:
                if (float.IsNaN(spriteAnimation.sprites[i].pivot.x) || float.IsNaN(spriteAnimation.sprites[i].pivot.y))
                {
                    Debug.Log("There is a problem with sprite: " + spriteAnimation.sprites[i].name + " (pivot is NaN)");
                }

                spriteKeyFrames[i]       = new ObjectReferenceKeyframe();
                spriteKeyFrames[i].time  = i / clip.frameRate;
                spriteKeyFrames[i].value = spriteAnimation.sprites[i];
            }
            AnimationUtility.SetObjectReferenceCurve(clip, spriteBinding, spriteKeyFrames);

            return(clip);
        }
Exemple #17
0
    private void CreateAnimationClipFile(DirectionAnimation directionAnimation, Direction direction,
                                         string targetFolder)
    {
        var name = direction + "_" + directionAnimation.name;

        AnimationClip animClip = new AnimationClip();

        animClip.frameRate = directionAnimation.framerate; // FPS
        animClip.wrapMode  = WrapMode.Loop;
        EditorCurveBinding spriteBinding = new EditorCurveBinding();

        spriteBinding.type = typeof(SpriteRenderer);
        spriteBinding.path = "";

        spriteBinding.propertyName = "m_Sprite";
        ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[directionAnimation.frames];

        for (int i = 0; i < directionAnimation.frames; i++)
        {
            spriteKeyFrames[i]       = new ObjectReferenceKeyframe();
            spriteKeyFrames[i].time  = i;
            spriteKeyFrames[i].value = newSprites[currentAnimIndex + i];
        }

        currentAnimIndex += directionAnimation.frames;
        AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames);

        AssetDatabase.CreateAsset(animClip, targetFolder + "/" + name + ".anim");
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();

        Debug.Log("Trying to create : " + targetFolder + "/" + name + ".anim");
    }
Exemple #18
0
    /// <summary>
    /// 创建图片的动画
    /// </summary>
    /// <param name="type">1.UI图片  2.SpriteRenderer</param>
    /// <param name="itemPicTex"></param>
    /// <param name="numberForS">1秒多少张</param>
    public static void CreateAnimForTex(int type, Texture2D itemPicTex, string animPath, int numberForS)
    {
        AnimationClip clip = new AnimationClip();

        //设置帧率为30
        clip.frameRate = 30;

        //属性参数
        EditorCurveBinding curveBinding = new EditorCurveBinding();

        switch (type)
        {
        case 1:
            curveBinding.type = typeof(SpriteRenderer);
            break;

        case 2:
            curveBinding.type = typeof(Image);
            break;
        }
        curveBinding.path         = "";
        curveBinding.propertyName = "m_Sprite";

        //帧数相关
        ObjectReferenceKeyframe[] keyFrames = null;

        string path = AssetDatabase.GetAssetPath(itemPicTex);

        Object[] objs = AssetDatabase.LoadAllAssetsAtPath(path);
        keyFrames = new ObjectReferenceKeyframe[objs.Length];
        //动画长度是按秒为单位,1/10就表示1秒切10张图片,根据项目的情况可以自己调节
        float frameTime = 1 / (float)numberForS;
        int   i         = 0;

        objs.ToList().ForEach(obj =>
        {
            if (obj as Sprite != null)
            {
                Sprite itemSprite  = obj as Sprite;
                keyFrames[i]       = new ObjectReferenceKeyframe();
                keyFrames[i].time  = frameTime * i;
                keyFrames[i].value = itemSprite;
                i++;
            }
        });
        //最后结束再加一个第一帧
        keyFrames[i]       = new ObjectReferenceKeyframe();
        keyFrames[i].time  = frameTime * i;
        keyFrames[i].value = keyFrames[0].value;

        //设置idle文件为循环动画
        AnimationClipSettings clipSetting = AnimationUtility.GetAnimationClipSettings(clip);

        clipSetting.loopTime = !clip.isLooping;
        AnimationUtility.SetAnimationClipSettings(clip, clipSetting);
        //设置参数
        AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, keyFrames);
        AssetDatabase.CreateAsset(clip, animPath + "/" + itemPicTex.name + ".anim");
        AssetDatabase.SaveAssets();
    }
Exemple #19
0
    private void CreateAnim(Sprite[] sprites, int dir, int index)
    {
        Debug.Log(sprites.Length);
        int           startIndex = dir * sprites.Length / cnt;
        AnimationClip animClip   = new AnimationClip();

        animClip.frameRate = 60;   // FPS
        EditorCurveBinding spriteBinding = new EditorCurveBinding();

        spriteBinding.type         = typeof(SpriteRenderer);
        spriteBinding.path         = "";
        spriteBinding.propertyName = "m_Sprite";
        ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length / cnt];
        for (int i = 0; i < (sprites.Length) / cnt; i++)
        {
            spriteKeyFrames[i]       = new ObjectReferenceKeyframe();
            spriteKeyFrames[i].time  = i * (1.0f / animClip.frameRate);
            spriteKeyFrames[i].value = sprites[startIndex + i];
        }
        AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames);
        AnimationClipSettings animClipSett = new AnimationClipSettings();

        animClipSett.loopTime = true;
        animClipSett.stopTime = (1.0f / animClip.frameRate) * sprites.Length / cnt;
        AnimationUtility.SetAnimationClipSettings(animClip, animClipSett);

        AssetDatabase.CreateAsset(animClip, animationFolderPath + "/" + unitName + "/" + folderName[index] + "/" + (dir / 10).ToString() + (dir % 10).ToString() + "_" + types[index] + "_" + fileName + ".anim");
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();

        animOVR[(dir / 10).ToString() + (dir % 10).ToString() + "_" + types[index] + "_" + "sample"] = animClip;
    }
Exemple #20
0
        private static AnimationClip GenerateAnimation(List <Sprite> sprites, int frameRate, bool isLooping, string name)
        {
            var animationClip = new AnimationClip()
            {
                name      = name,
                frameRate = frameRate
            };

            if (isLooping)
            {
                var animationClipSettings = AnimationUtility.GetAnimationClipSettings(animationClip);
                animationClipSettings.loopTime = true;
                AnimationUtility.SetAnimationClipSettings(animationClip, animationClipSettings);
            }
            var editorCurveBinding = new EditorCurveBinding()
            {
                type         = typeof(SpriteRenderer),
                propertyName = "m_Sprite",
            };
            var timeStep  = 1f / frameRate;
            var keyFrames = new ObjectReferenceKeyframe[sprites.Count];

            for (var index = 0; index < sprites.Count; index++)
            {
                keyFrames[index] = new ObjectReferenceKeyframe()
                {
                    time  = timeStep * index,
                    value = sprites[index],
                };
            }
            AnimationUtility.SetObjectReferenceCurve(animationClip, editorCurveBinding, keyFrames);
            return(animationClip);
        }
    static void CreateAnimationClip(AnimationClip animClip, SMWAnimation animSettings)
    {
        Sprite[] sprites         = animSettings.sprites;
        int      animationLength = animSettings.keyFrames;
        float    singleFrameTime = 1.0f / animSettings.framesPerSecond;
//		Debug.Log("Create Animation: " + animClip.name + " " + " Spritearray = " + sprites.Length + ", Animation length = " + animationLength + ", single frame time = " + singleFrameTime );
        // First you need to create e Editor Curve Binding
        EditorCurveBinding curveBinding = new EditorCurveBinding();

        // I want to change the sprites of the sprite renderer, so I put the typeof(SpriteRenderer) as the binding type.
        curveBinding.type = typeof(SpriteRenderer);
        // Regular path to the gameobject that will be changed (empty string means root)
        curveBinding.path = "";
        // This is the property name to change the sprite of a sprite renderer
        curveBinding.propertyName = "m_Sprite";

//		curveBinding.propertyName = "

        // An array to hold the object keyframes
        ObjectReferenceKeyframe[] keyFrames = new ObjectReferenceKeyframe[animationLength];

        for (int i = 0; i < sprites.Length; i++)
        {
            keyFrames[i] = new ObjectReferenceKeyframe();
            // set the time
            keyFrames[i].time = i * singleFrameTime;                            // TODO important
            // set reference for the sprite you want
            keyFrames[i].value = sprites[i];
        }

        AnimationUtility.SetObjectReferenceCurve(animClip, curveBinding, keyFrames);
    }
Exemple #22
0
    private void SaveAnimation()
    {
        string savingPath = EditorUtility.SaveFilePanelInProject("保存动画片段", SelectedSpritesList[0].name + ".anim", "anim", "Select Path To Save AnimationClip", savingPathBuffer);

        if (savingPath.Length > 0)
        {
            savingPathBuffer = savingPath;
            AnimationClip      clip         = new AnimationClip();
            EditorCurveBinding curveBinding = new EditorCurveBinding();
            curveBinding.type         = typeof(SpriteRenderer);
            curveBinding.path         = "";
            curveBinding.propertyName = "m_Sprite";
            ObjectReferenceKeyframe[] keyFrames = new ObjectReferenceKeyframe[SelectedSpritesList.Count];
            float frameTime = 1f / frameCount;
            for (int i = 0; i < SelectedSpritesList.Count; i++)
            {
                keyFrames[i]       = new ObjectReferenceKeyframe();
                keyFrames[i].time  = frameTime * i;
                keyFrames[i].value = SelectedSpritesList[i];
            }
            clip.frameRate = frameCount;
            AnimationClipSettings clipSetting = AnimationUtility.GetAnimationClipSettings(clip);
            clipSetting.loopTime = isAnimationLoop;
            AnimationUtility.SetAnimationClipSettings(clip, clipSetting);
            AnimationUtility.SetObjectReferenceCurve(clip, curveBinding, keyFrames);
            AssetDatabase.CreateAsset(clip, savingPath);
            AssetDatabase.SaveAssets();
            Debug.Log(savingPath + "创建成功");
        }
    }
Exemple #23
0
    AnimationClip createAnimationClip(List <Sprite> sources, string animName, bool isLoop = false)
    {
        sources.Sort((x, y) =>
        {
            return(x.name.CompareTo(y.name));
        });
        float         samples  = Samples;
        AnimationClip animClip = new AnimationClip();

        animClip.name      = animName;
        animClip.frameRate = samples;   // FPS=
        EditorCurveBinding spriteBinding = new EditorCurveBinding();

        spriteBinding.type         = typeof(SpriteRenderer);
        spriteBinding.path         = "";
        spriteBinding.propertyName = "m_Sprite";
        ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sources.Count];
        for (int i = 0; i < (sources.Count); i++)
        {
            spriteKeyFrames[i]       = new ObjectReferenceKeyframe();
            spriteKeyFrames[i].time  = i * (1 / (float)samples);
            spriteKeyFrames[i].value = sources[i];
        }
        AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames);
        var settings = AnimationUtility.GetAnimationClipSettings(animClip);

        settings.loopTime = isLoop;
        settings.stopTime = sources.Count * (1 / (float)samples);
        AnimationUtility.SetAnimationClipSettings(animClip, settings);
        return(animClip);
    }
Exemple #24
0
    public void CreateClip()
    {
        print(GetRelativeName(Path, false));

        AnimClip           = new AnimationClip();
        AnimClip.name      = Name;
        AnimClip.frameRate = FPS;
        if (Loop)
        {
            AnimClip.wrapMode = WrapMode.Loop;
        }
        else
        {
            AnimClip.wrapMode = WrapMode.Default;
        }



        SpriteBinding              = new EditorCurveBinding();
        SpriteBinding.type         = typeof(SpriteRenderer);
        SpriteBinding.path         = GetRelativeName(Path, false);
        SpriteBinding.propertyName = "Sprite Renderer";

        SpriteKeyFrames = new ObjectReferenceKeyframe[Sprites.Count];
        for (int i = 0; i < Sprites.Count; i++)
        {
            SpriteKeyFrames [i]       = new ObjectReferenceKeyframe();
            SpriteKeyFrames [i].time  = i;
            SpriteKeyFrames [i].value = Sprites [i];
        }
        AnimationUtility.SetObjectReferenceCurve(AnimClip, SpriteBinding, SpriteKeyFrames);


        AssetDatabase.CreateAsset(AnimClip, "assets/Animations/" + Name + ".anim");
    }
    private static ObjectReferenceKeyframe CreateKeyframe(float time, Sprite sprite)
    {
        ObjectReferenceKeyframe keyframe = new ObjectReferenceKeyframe();

        keyframe.time  = time;
        keyframe.value = sprite;
        return(keyframe);
    }
        /// <summary>
        /// Adds a new Frame to this animation.
        /// </summary>
        void AddFrame()
        {
            ObjectReferenceKeyframe keyFrame = new ObjectReferenceKeyframe();

            keyFrame.time = spriteKeyFrames.Count / asset.frameRate;
            spriteKeyFrames.Add(new KeyFrame(keyFrame, defaultSpriteTime));
            viewIndex = spriteKeyFrames.Count;
        }
Exemple #27
0
        private static ObjectReferenceKeyframe CreateKeyFrame(float animTimePos, Sprite sprite)
        {
            var keyFrame = new ObjectReferenceKeyframe();

            keyFrame.time  = animTimePos;
            keyFrame.value = sprite;
            return(keyFrame);
        }
    // Actually change asset configurations.
    public void Modify(UnityEngine.Object[] assets, List <AssetReference> group)
    {
        var animClip = assets.Where(a => a is AnimationClip).FirstOrDefault() as AnimationClip;

        var spriteAssets = group.Where(a => a.importerType == typeof(TextureImporter)).OrderBy(a => a.fileName);

        List <Sprite> sprites = new List <Sprite>();

        foreach (var a in spriteAssets)
        {
            foreach (var o in a.allData)
            {
                var s = o as Sprite;
                if (s != null)
                {
                    sprites.Add(s);
                }
            }
        }
        animClip.frameRate = m_frameRate;

        var setting = AnimationUtility.GetAnimationClipSettings(animClip);

        setting.loopTime = m_loopTime;

        AnimationUtility.SetAnimationClipSettings(animClip, setting);

        EditorCurveBinding spriteBinding = new EditorCurveBinding();

        spriteBinding.type         = typeof(SpriteRenderer);
        spriteBinding.path         = "";
        spriteBinding.propertyName = "m_Sprite";

        EditorCurveBinding uiBinding = new EditorCurveBinding();

        uiBinding.type         = typeof(UnityEngine.UI.Image);
        uiBinding.path         = "";
        uiBinding.propertyName = "m_Sprite";

        ObjectReferenceKeyframe[] keyframes = new ObjectReferenceKeyframe[sprites.Count];
        for (int i = 0; i < sprites.Count; i++)
        {
            keyframes[i]       = new ObjectReferenceKeyframe();
            keyframes[i].time  = i / (float)m_frameRate;
            keyframes[i].value = sprites[i];
        }

        if (m_animType == AnimationType.SpriteAnimation)
        {
            AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, keyframes);
            AnimationUtility.SetObjectReferenceCurve(animClip, uiBinding, null);
        }
        else
        {
            AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, null);
            AnimationUtility.SetObjectReferenceCurve(animClip, uiBinding, keyframes);
        }
    }
        public ObjectReferenceKeyframe ToObjectReferenceKeyframe()
        {
            var keyframe = new ObjectReferenceKeyframe();

            keyframe.time  = time;
            keyframe.value = (UnityEngine.Object)value;

            return(keyframe);
        }
        /// <summary>
        /// Set the sprite for this keyframe.
        /// </summary>
        void SetSprite()
        {
            ObjectReferenceKeyframe frame = spriteKeyFrames[viewIndex - 1].frame;

            frame.value =
                EditorGUILayout.ObjectField("Sprite", frame.value, typeof(Sprite), false) as
                Sprite;
            spriteKeyFrames[viewIndex - 1].frame = frame;
        }