示例#1
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);
        }
 public static PSpriteSheetAnimationData ToPStateData(this SpriteSheetAnimationData stateData)
 {
     return(new PSpriteSheetAnimationData
     {
         States = { stateData.States.Select(gState => gState.ToPStateData()) }
     });
 }
    public static void SetAnimation(EntityCommandBuffer commandBuffer, Entity e, SpriteSheetAnimationData animation, BufferHook hook)
    {
        Material oldMaterial  = DynamicBufferManager.GetMaterial(hook.bufferEnityID);
        string   oldAnimation = SpriteSheetCache.GetMaterialName(oldMaterial);

        if (animation.animationName != oldAnimation)
        {
            Material material            = SpriteSheetCache.GetMaterial(animation.animationName);
            var      spriteSheetMaterial = new SpriteSheetMaterial {
                material = material
            };

            //clean old buffer
            DynamicBufferManager.RemoveBuffer(oldMaterial, hook.bufferID);

            //use new buffer
            int        bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material);
            BufferHook bh       = new BufferHook {
                bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial)
            };

            commandBuffer.SetSharedComponent(e, spriteSheetMaterial);
            commandBuffer.SetComponent(e, bh);
        }
        commandBuffer.SetComponent(e, new SpriteSheetAnimation {
            maxSprites = animation.sprites.Length, play = animation.playOnStart, samples = animation.samples, repetition = animation.repetition, elapsedFrames = 0
        });
        commandBuffer.SetComponent(e, new SpriteIndex {
            Value = animation.startIndex
        });
    }
    public static Entity Instantiate(EntityArchetype archetype, SpriteSheetAnimator animator)
    {
        Entity e = EntityManager.CreateEntity(archetype);

        animator.currentAnimationIndex = animator.defaultAnimationIndex;
        SpriteSheetAnimationData startAnim = animator.animations[animator.defaultAnimationIndex];
        int      maxSprites = startAnim.sprites.Length;
        Material material   = SpriteSheetCache.GetMaterial(animator.animations[animator.defaultAnimationIndex].animationName);
        int      bufferID   = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material);

        var spriteSheetMaterial = new SpriteSheetMaterial {
            material = material
        };
        BufferHook bh = new BufferHook {
            bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial)
        };

        EntityManager.SetComponentData(e, bh);
        EntityManager.SetComponentData(e, new SpriteSheetAnimation {
            maxSprites = maxSprites, play = startAnim.playOnStart, samples = startAnim.samples, repetition = startAnim.repetition
        });
        EntityManager.SetComponentData(e, new SpriteIndex {
            Value = startAnim.startIndex
        });
        EntityManager.SetSharedComponentData(e, spriteSheetMaterial);
        animator.managedEntity = e;
        SpriteSheetCache.entityAnimator.Add(e, animator);
        return(e);
    }
示例#5
0
    public static void SetAnimation(Entity e, SpriteSheetAnimationData animation)
    {
        int      bufferEnityID = EntityManager.GetComponentData <BufferHook>(e).bufferEnityID;
        int      bufferID      = EntityManager.GetComponentData <BufferHook>(e).bufferID;
        Material oldMaterial   = DynamicBufferManager.GetMaterial(bufferEnityID);
        string   oldAnimation  = SpriteSheetCache.GetMaterialName(oldMaterial);

        if (animation.animationName != oldAnimation)
        {
            Material material            = SpriteSheetCache.GetMaterial(animation.animationName);
            var      spriteSheetMaterial = new SpriteSheetMaterial {
                material = material
            };

            DynamicBufferManager.RemoveBuffer(oldMaterial, bufferID);

            //use new buffer
            bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material);
            BufferHook bh = new BufferHook {
                bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial)
            };

            EntityManager.SetSharedComponentData(e, spriteSheetMaterial);
            EntityManager.SetComponentData(e, bh);
        }
        EntityManager.SetComponentData(e, new SpriteSheetAnimation {
            maxSprites = animation.sprites.Length, play = animation.playOnStart, samples = animation.samples, repetition = animation.repetition, elapsedFrames = 0
        });
        EntityManager.SetComponentData(e, new SpriteIndex {
            Value = animation.startIndex
        });
        MarkDirty <SpriteSheetColor>(e);
        MarkDirty <SpriteIndex>(e);
        MarkDirty <SpriteMatrix>(e);
    }
示例#6
0
        private static AnimationClip CreateAnimationClip(SpriteSheetAnimationData spriteAnimation, string saveDirectoryPath)
        {
            AnimationClip clip = CreateAnimationClip(spriteAnimation);

            AssetDatabase.CreateAsset(clip, Path.Combine(saveDirectoryPath, spriteAnimation.name + ".anim"));
            AnimationClipSettings clipSettings = AnimationUtility.GetAnimationClipSettings(clip);

            clipSettings.loopTime = clip.isLooping;
            AnimationUtility.SetAnimationClipSettings(clip, clipSettings);

            return(clip);
        }
 public void AddAnimation(string name, SpriteSheetAnimationData data)
 {
     animationFactory.Add(name, data);
 }