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); }
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); }
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); }