예제 #1
0
        void OnGUI()
        {
            GUILayout.Label("Texture", EditorStyles.boldLabel);
            Texture2D newSpriteSheet = (Texture2D)EditorGUILayout.ObjectField("Sprite Sheet", spriteSheet, typeof(Texture2D), false);

            if (newSpriteSheet != null)
            {
                if (spriteSheet != newSpriteSheet)
                {
                    // Look for text asset
                    string assetPath = AssetDatabase.GetAssetPath(newSpriteSheet);

                    foreach (ISpriteSheetParser parser in spriteParsers.Values)
                    {
                        var       dataAssetPath   = Path.GetDirectoryName(assetPath) + "/" + Path.GetFileNameWithoutExtension(assetPath) + "." + parser.FileExtension;
                        TextAsset searchTextAsset = AssetDatabase.LoadAssetAtPath(dataAssetPath, typeof(TextAsset)) as TextAsset;
                        if (searchTextAsset != null)
                        {
                            textAsset = searchTextAsset;
                            break;
                        }
                    }
                }
                spriteSheet = newSpriteSheet;
            }
            else
            {
                spriteSheet = null;
            }

            GUILayout.Label("Sprites Information", EditorStyles.boldLabel);
            textAsset       = (TextAsset)EditorGUILayout.ObjectField("Sprite Sheet XML", textAsset, typeof(TextAsset), false);
            dataFormat      = (SpriteDataFormat)EditorGUILayout.EnumPopup("Data Format", dataFormat);
            spriteAlignment = (SpriteAlignment)EditorGUILayout.EnumPopup("Sprite Alignment", spriteAlignment);
            if (spriteAlignment == SpriteAlignment.Custom)
            {
                customPivot = EditorGUILayout.Vector2Field("Custom Pivot", customPivot);
            }

            GUILayout.Space(10);
            if (textAsset != null && spriteSheet != null)
            {
                if (GUILayout.Button("Import Sprites"))
                {
                    Vector2 size = GetOriginalSize(newSpriteSheet);
                    if (size.x != spriteSheet.width && size.y != spriteSheet.height)
                    {
                        Debug.LogWarning("Cannot convert sprite sheet when it's not it's original size. It's original size is '" + size.x + "x" + size.y + "' and build size is '" + spriteSheet.width + "x" + spriteSheet.height + "'. You can change the texture size to it's original size, import sprites and then change the texture size back.");
                        return;
                    }

                    if (spriteParsers[dataFormat].ParseAsset(spriteSheet, textAsset, PivotValue))
                    {
                        Debug.Log("Imported Sprites");
                        return;
                    }

                    Debug.LogError("Failed To Parse Asset");
                }
            }
            else
            {
                GUILayout.Label("Cannot Import", EditorStyles.boldLabel);
                GUILayout.Label("Please select a sprite sheet and text asset to import sprite sheet", EditorStyles.textArea);
            }
        }
예제 #2
0
        void OnGUI()
        {
            GUILayout.Label("Texture", EditorStyles.boldLabel);
            Texture2D newSpriteSheet = (Texture2D)EditorGUILayout.ObjectField("Sprite Sheet", spriteSheet, typeof(Texture2D), false);

            if (newSpriteSheet != null)
            {
                if (spriteSheet != newSpriteSheet)
                {
                    // Look for text asset
                    string assetPath = AssetDatabase.GetAssetPath(newSpriteSheet);

                    foreach (ISpriteSheetParser parser in spriteParsers.Values)
                    {
                        var       dataAssetPath   = Path.GetDirectoryName(assetPath) + "/" + Path.GetFileNameWithoutExtension(assetPath) + "." + parser.FileExtension;
                        TextAsset searchTextAsset = AssetDatabase.LoadAssetAtPath(dataAssetPath, typeof(TextAsset)) as TextAsset;
                        if (searchTextAsset != null)
                        {
                            textAsset = searchTextAsset;
                            break;
                        }
                    }
                }
                spriteSheet = newSpriteSheet;
            }
            else
            {
                spriteSheet = null;
            }

            GUILayout.Label("Sprites Information", EditorStyles.boldLabel);
            textAsset  = (TextAsset)EditorGUILayout.ObjectField("Sprite Sheet XML", textAsset, typeof(TextAsset), false);
            dataFormat = (SpriteDataFormat)EditorGUILayout.EnumPopup("Data Format", dataFormat);

            GUILayout.Label("Import Options", EditorStyles.boldLabel);
            forcePivotOverwrite = EditorGUILayout.Toggle("Force Overwrite Pivot", forcePivotOverwrite);

            if (forcePivotOverwrite)
            {
                spriteAlignment = (SpriteAlignment)EditorGUILayout.EnumPopup("Sprite Pivot", spriteAlignment);
                if (spriteAlignment == SpriteAlignment.Custom)
                {
                    customPivot = EditorGUILayout.Vector2Field("Custom Pivot", customPivot);
                }
            }

            GUILayout.Label("Animation Options", EditorStyles.boldLabel);
            generateSpriteSheet = EditorGUILayout.Toggle("Generate Animation", generateSpriteSheet);
            if (generateSpriteSheet)
            {
                fps = EditorGUILayout.FloatField("Frames Per Second", fps);
                generateGameObject = EditorGUILayout.Toggle("Create GameObject", generateGameObject);
            }

            GUILayout.Space(10);
            if (textAsset != null && spriteSheet != null)
            {
                if (GUILayout.Button("Import Sprites"))
                {
                    errorMessage = null;

                    Vector2 size = GetOriginalSize(newSpriteSheet);
                    if (size.x != spriteSheet.width && size.y != spriteSheet.height)
                    {
                        errorMessage = "Cannot convert sprite sheet when it's not it's original size. It's original size is '" + size.x + "x" + size.y + "' and build size is '" + spriteSheet.width + "x" + spriteSheet.height + "'. You can change the texture size to it's original size, import sprites and then change the texture size back.";
                        Debug.LogWarning(errorMessage);
                        //Debug.LogWarning("Cannot convert sprite sheet when it's not it's original size. It's original size is '" + size.x +"x" + size.y+"' and build size is '" + spriteSheet.width + "x" + spriteSheet.height + "'. You can change the texture size to it's original size, import sprites and then change the texture size back.");
                        return;
                    }

                    if (spriteParsers[dataFormat].ParseAsset(spriteSheet, textAsset, forcePivotOverwrite ? PivotValue : new Vector2(0f, 1.0f), forcePivotOverwrite))
                    {
                        Debug.Log("Imported Sprites");
                        if (generateSpriteSheet)
                        {
                            AnimationCreator.GenerateAnimation(spriteSheet, fps, generateGameObject);
                        }

                        return;
                    }

                    Debug.LogError("Failed To Parse Asset");
                }
            }
            else
            {
                GUILayout.Label("Cannot Import", EditorStyles.boldLabel);
                GUILayout.Label("Please select a sprite sheet and text asset to import sprite sheet", EditorStyles.helpBox);
            }

            if (!string.IsNullOrEmpty(errorMessage))
            {
                GUILayout.Space(10);
                EditorGUILayout.HelpBox(errorMessage, MessageType.Warning);
            }
        }