Esempio n. 1
0
    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();
    }
Esempio n. 2
0
 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();
 }
Esempio n. 3
0
    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");
    }
}