private static string GetFormatArgs(string inputFolder, string sheetName, string dataFileName, bool multiPack, ATLAS_TEXTUREFORMAT texFormat,
                                        ATLAS_FORMAT format, bool trimSpritesName,
                                        int maxSize, bool forceSq, bool forcePublish,
                                        ATLAS_PIXEL_OPT opt, float scale, ATLAS_SIZE_CONSTRAINTS sizeConstraints,
                                        bool disableAutoAlias, ATLAS_PACK_MODE packMode)
    {
        string args = string.Format(TEXTUREPACKER_ARGS, inputFolder, sheetName, texFormat, format, dataFileName,
                                    trimSpritesName ? "--trim-sprite-names" : "",
                                    maxSize,
                                    forceSq ? "--force-squared" : "",
                                    multiPack ? "--multipack" : "",
                                    forcePublish ? "--force-publish" : "",
                                    opt,
                                    scale,
                                    sizeConstraints,
                                    disableAutoAlias ? "--disable-auto-alias" : "",
                                    packMode
                                    );

        return(args);
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="inputFolder">images in the folder need to be packed</param>
    /// <param name="sheetName"></param>
    /// <param name="dataFileName"></param>
    /// <param name="texFormat"></param>
    /// <param name="format"></param>
    /// <param name="trimSpritesName"></param>
    /// <param name="maxSize"></param>
    /// <param name="forceSq"></param>
    /// <param name="multiPack"></param>
    /// <param name="forcePublish">force republish even there no changes</param>
    /// <param name="opt"></param>
    /// <param name="scale"></param>
    /// <param name="sizeConstraints"></param>
    /// <param name="disableAutoAlias"></param>
    /// <param name="packMode"></param>
    private static void PackOneFolder(string inputFolder, string sheetName, string dataFileName, bool multiPack, string postFix, ATLAS_TEXTUREFORMAT texFormat,
                                      ATLAS_FORMAT format, bool trimSpritesName,
                                      int maxSize, bool forceSq, bool forcePublish,
                                      ATLAS_PIXEL_OPT opt, float scale, ATLAS_SIZE_CONSTRAINTS sizeConstraints,
                                      bool disableAutoAlias, ATLAS_PACK_MODE packMode)
    {
        if (!Directory.Exists(inputFolder))
        {
            Debug.LogError(string.Format("[TexturePacker]: {0} do not exist!", inputFolder));
            return;
        }

        if (!inputFolder.Contains("Assets"))
        {
            Debug.LogError(string.Format("[TextuePacker]: {0} images can not pack to atlas!", inputFolder));
            return;
        }

        string args;

        string[] returnResultAtlas;
        if (multiPack)
        {
            string assetPath = inputFolder.Substring(inputFolder.IndexOf("Assets"));
            CheckAllTextureSize(assetPath, maxSize);
            string folderPath = Path.GetFileName(sheetName);
            sheetName    += "/" + folderPath + "_{n}" + postFix + ".png";
            dataFileName += "/" + folderPath + "_{n}" + postFix + "_cfg.json";
            //format all args
            args = GetFormatArgs(inputFolder, sheetName, dataFileName, multiPack, texFormat, format,
                                 trimSpritesName,
                                 maxSize,
                                 forceSq,
                                 forcePublish,
                                 opt,
                                 scale,
                                 sizeConstraints,
                                 disableAutoAlias,
                                 packMode
                                 );
            returnResultAtlas = CallPackerProcess(args);
            AssetDatabase.Refresh();

            ProcessToSprite(returnResultAtlas, assetPath, false);
        }
        else
        {
            inputFolder = inputFolder.Substring(inputFolder.IndexOf("Assets"));
            string[] folder = { inputFolder };
            string[] guids  = AssetDatabase.FindAssets("t:texture2D", folder);
            foreach (string g in guids)
            {
                string p = AssetDatabase.GUIDToAssetPath(g);

                AssertTextureSize(p, maxSize);

                p = Application.dataPath.Substring(0, Application.dataPath.Length - 6) + p;

                string newSheetName    = sheetName + "/" + System.IO.Path.GetFileNameWithoutExtension(p) + postFix + ".png";
                string newDataFileName = dataFileName + "/" + System.IO.Path.GetFileNameWithoutExtension(p) + postFix + "_cfg.json";

                args = GetFormatArgs(p, newSheetName, newDataFileName, multiPack, texFormat, format,
                                     trimSpritesName,
                                     maxSize,
                                     forceSq,
                                     forcePublish,
                                     opt,
                                     scale,
                                     sizeConstraints,
                                     disableAutoAlias,
                                     packMode
                                     );

                returnResultAtlas = CallPackerProcess(args);
                AssetDatabase.Refresh();

                ProcessToSprite(returnResultAtlas, Path.GetDirectoryName(AssetDatabase.GUIDToAssetPath(g)), true);
            }
        }
    }