private void TryReloadSeries() { string path = AssetDatabase.GetAssetPath(texture); string textureName = texture.name; TextureImporter importer = AssetImporter.GetAtPath(path) as TextureImporter; SpriteMetaData[] spritesheed = importer.spritesheet; Dictionary <string, SpriteSerie> tserie = new Dictionary <string, SpriteSerie>(); for (int i = 0; i < spritesheed.Length; i++) { string name = spritesheed[i].name.Replace($"{textureName}_", ""); name = spriteIndex.Replace(name, ""); if (tserie.ContainsKey(name)) { tserie[name].ScaleSerie(i); } else { tserie[name] = new SpriteSerie() { name = name, start = i, end = i }; } } series = tserie.Values.ToList(); }
private void SerieEditor(SpriteSerie serie) { EditorGUILayout.BeginHorizontal(); serie.name = EditorGUILayout.TextField(serie.name); serie.start = EditorGUILayout.IntSlider(serie.start, 0, count - 1); serie.end = EditorGUILayout.IntSlider(serie.end, 0, count - 1); if (GUILayout.Button("Delete")) { series.Remove(serie); Repaint(); } EditorGUILayout.EndHorizontal(); }
private void CreateAnimation(SpriteSerie serie, Texture2D tex, Transform anim, Transform rend, string targetFolder) { if (targetFolder.StartsWith(Application.dataPath)) { targetFolder = "Assets" + targetFolder.Substring(Application.dataPath.Length); } Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(tex)).OfType <Sprite>().ToArray(); Dictionary <string, Sprite> lookupTable = new Dictionary <string, Sprite>(); foreach (Sprite s in sprites) { lookupTable[s.name] = s; } TextureImporter importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(tex)) as TextureImporter; SpriteMetaData[] spritesheed = importer.spritesheet; string transformPath = AnimationUtility.CalculateTransformPath(rend, anim); int framecount = serie.end - serie.start + 1; AnimationClip clip = new AnimationClip(); clip.name = $"{tex.name}_{serie.name}"; clip.frameRate = framecount; clip.wrapMode = WrapMode.Loop; // now some voodoo stuff to set sprite ref on those keyframes EditorCurveBinding binding = EditorCurveBinding.PPtrCurve(transformPath, typeof(SpriteRenderer), "m_Sprite"); ObjectReferenceKeyframe[] objectRefCurve = new ObjectReferenceKeyframe[framecount]; for (int i = 0; i < objectRefCurve.Length; i++) { objectRefCurve[i] = new ObjectReferenceKeyframe() { time = i / (float)framecount, value = lookupTable[spritesheed[serie.start + i].name] } } ; AnimationUtility.SetObjectReferenceCurve(clip, binding, objectRefCurve); AssetDatabase.CreateAsset(clip, $"{targetFolder}\\{clip.name}.anim"); } }