public WeaverAnimationData.Clip GetClip(string clipName) { if (!HasClip(clipName)) { throw new Exception("The clip " + clipName + " does not exist on this animator"); } var clipIndex = GetClipIndex(clipName); var clipFPSs = serializedObject.FindProperty("clipFPSs"); var clipLoopStarts = serializedObject.FindProperty("clipLoopStarts"); var clipWrapModes = serializedObject.FindProperty("clipWrapModes"); var clipFrameStartIndexes = serializedObject.FindProperty("clipFrameStartIndexes"); var clipFrameCounts = serializedObject.FindProperty("clipFrameCounts"); var frames = serializedObject.FindProperty("frames"); var clip = new WeaverAnimationData.Clip { FPS = clipFPSs.GetArrayElementAtIndex(clipIndex).floatValue,//clipFPSs[clipIndex], LoopStart = clipLoopStarts.GetArrayElementAtIndex(clipIndex).intValue,//clipLoopStarts[clipIndex], Name = clipName, WrapMode = (WeaverAnimationData.WrapMode)clipWrapModes.GetArrayElementAtIndex(clipIndex).enumValueIndex//clipWrapModes[clipIndex] }; var frameStart = clipFrameStartIndexes.GetArrayElementAtIndex(clipIndex).intValue;//clipFrameStartIndexes[clipIndex]; var frameCount = clipFrameCounts.GetArrayElementAtIndex(clipIndex).intValue;//clipFrameCounts[clipIndex]; //Debug.Log("Frames_A = " + clip.Frames); //Debug.Log("Frame Count = " + frameCount); for (int i = frameStart; i < frameStart + frameCount; i++) { //clip.AddFrame(frames[i]); clip.AddFrame((Sprite)frames.GetArrayElementAtIndex(i).objectReferenceValue); } return clip; }
public static IEnumerator DecomposeTK2DAnimation(UnityEngine.Object tk2dSpriteAnimation, string animationName = null) { //var data = GetCollectionData(tk2dSpriteCollection); if (animationName == null) { animationName = "DecomposedAnimation"; } var animationData = GetAnimationData(tk2dSpriteAnimation); Dictionary <int, SpriteCollectionData> spriteCollections = new Dictionary <int, SpriteCollectionData>(); Dictionary <int, SpritePackage> sprites = new Dictionary <int, SpritePackage>(); foreach (var clip in animationData.Clips) { foreach (var frame in clip.Frames) { if (!spriteCollections.ContainsKey(frame.SpriteCollectionRaw.GetInstanceID())) { spriteCollections.Add(frame.SpriteCollectionRaw.GetInstanceID(), GetCollectionData(frame.SpriteCollectionRaw)); OutClass <SpritePackage> outputSprites = new OutClass <SpritePackage>(); //List<Sprite> sprites = new List<Sprite>(); yield return(UnpackToSpriteAsyncInternal(frame.SpriteCollectionRaw, outputSprites, "Assets\\" + animationName)); sprites.Add(frame.SpriteCollectionRaw.GetInstanceID(), outputSprites.Value); } } } WeaverAnimationData data = ScriptableObject.CreateInstance <WeaverAnimationData>(); foreach (var clipRaw in animationData.Clips) { if (clipRaw.Name == null || clipRaw.Name == "") { continue; } var clip = new WeaverAnimationData.Clip { FPS = clipRaw.FPS, LoopStart = clipRaw.LoopStart, Name = clipRaw.Name, }; switch (clipRaw.WrapMode) { case WrapMode.Loop: clip.WrapMode = WeaverAnimationData.WrapMode.Loop; break; case WrapMode.LoopSection: clip.WrapMode = WeaverAnimationData.WrapMode.LoopSection; break; case WrapMode.Once: clip.WrapMode = WeaverAnimationData.WrapMode.Once; break; case WrapMode.PingPong: clip.WrapMode = WeaverAnimationData.WrapMode.PingPong; break; case WrapMode.RandomFrame: clip.WrapMode = WeaverAnimationData.WrapMode.RandomFrame; break; case WrapMode.RandomLoop: clip.WrapMode = WeaverAnimationData.WrapMode.RandomLoop; break; case WrapMode.Single: clip.WrapMode = WeaverAnimationData.WrapMode.SingleFrame; break; default: break; } foreach (var frameRaw in clipRaw.Frames) { clip.AddFrame(sprites[frameRaw.SpriteCollectionRaw.GetInstanceID()].GetSprite(frameRaw.SpriteID)); } data.AddClip(clip); } AssetDatabase.CreateAsset(data, "Assets/" + animationName + "/" + animationName + ".asset"); }