private void DoPackSpritesFolder()
        {
            GUILayout.BeginVertical(SubGroupStyleName);

            ShowTitle("指定文件夹Pack Sprite");

            CreateDropTextField("Sprites文件夹:", ref mInputPath);

            string[] tSpriteAssets = AssetDatabase.FindAssets("t:Sprite", new string[] { mInputPath });
            if (tSpriteAssets != null &&
                tSpriteAssets.Length > 0)
            {
                int    tCnt     = tSpriteAssets.Length;
                string btnLabel = string.Format("==Pack {0} Sprites==", tCnt);
                if (GUILayout.Button(btnLabel))
                {
                    if (string.IsNullOrEmpty(mOutputPath))
                    {
                        ShowNotification(new GUIContent("请指定输出路径"));
                        return;
                    }

                    if (string.IsNullOrEmpty(mPackName))
                    {
                        ShowNotification(new GUIContent("请指定输出文件的名字"));
                        return;
                    }

                    Sprite[] tSprites = new Sprite[tCnt];
                    int      i        = 0;
                    foreach (string guid in tSpriteAssets)
                    {
                        string path = AssetDatabase.GUIDToAssetPath(guid);
                        foreach (Object asset in AssetDatabase.LoadAllAssetsAtPath(path))
                        {
                            Sprite sprite = asset as Sprite;
                            if (sprite != null)
                            {
                                tSprites[i++] = sprite;
                            }
                        }
                    }

                    SimplePacker.Pack(tSprites, (int)mWidthType, (int)mHeightType, out mPackTextureAttrSet);
                    WriteResult(mOutputPath, mPackName, mPackTextureFormat, ref mPackTextureAttrSet);

                    AssetDatabase.SaveAssets();
                    AssetDatabase.Refresh();

                    //显示引用的图片
                    if (mPackTextureAttrSet != null)
                    {
                        mPackTexture = mPackTextureAttrSet.packTexture;
                    }
                }
            }

            GUILayout.EndVertical();
        }
        private void DoPackSprites()
        {
            GUILayout.BeginVertical(SubGroupStyleName);

            ShowTitle("指定Pack Sprite");

            CreateIntField("Sprite数目:", ref mSpriteCount);
            if (mSpriteCount <= 0)
            {
                mRawSprites = null;
            }
            else
            {
                if (mRawSprites == null || mRawSprites.Length != mSpriteCount)
                {
                    Sprite[] tSprites = new Sprite[mSpriteCount];
                    for (int i = 0; i < mSpriteCount && mRawSprites != null && i < mRawSprites.Length; ++i)
                    {
                        tSprites[i] = mRawSprites[i];
                    }
                    mRawSprites = tSprites;
                }
            }

            for (int i = 0; i < mSpriteCount; ++i)
            {
                GUILayout.BeginHorizontal(SubGroupStyleName);

                CreateSpriteField("Sprite:", ref mRawSprites[i]);

                GUILayout.EndHorizontal();
            }

            string btnLabel = string.Format("==Pack {0} Sprites==", mSpriteCount);

            if (GUILayout.Button(btnLabel) && mSpriteCount > 0)
            {
                if (string.IsNullOrEmpty(mOutputPath))
                {
                    ShowNotification(new GUIContent("请指定输出路径"));
                    return;
                }

                if (string.IsNullOrEmpty(mPackName))
                {
                    ShowNotification(new GUIContent("请指定输出文件的名字"));
                    return;
                }

                SimplePacker.Pack(mRawSprites, (int)mWidthType, (int)mHeightType, out mPackTextureAttrSet);
                WriteResult(mOutputPath, mPackName, mPackTextureFormat, ref mPackTextureAttrSet);

                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();

                //显示引用的图片
                mPackTexture = mPackTextureAttrSet.packTexture;
            }

            GUILayout.EndVertical();
        }
        private static void WriteResult(
            string folder,
            string fileName,
            TextureImporterFormat texImportFormat,
            ref PackTextureAttrSet packTextureAttrSet
            )
        {
            if (string.IsNullOrEmpty(folder) ||
                string.IsNullOrEmpty(fileName) ||
                packTextureAttrSet == null ||
                packTextureAttrSet.packTexture == null ||
                packTextureAttrSet.texVertexAttrList == null ||
                packTextureAttrSet.texVertexAttrList.Count == 0)
            {
                return;
            }


            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }

            //写纹理
            string texPath = string.Format("{0}/{1}.png", folder, fileName);

            //写纹理
            File.WriteAllBytes(texPath, packTextureAttrSet.packTexture.EncodeToPNG());
            AssetDatabase.ImportAsset(texPath, ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.ForceUpdate);

            //关联
            Texture2D tPackTexture = AssetDatabase.LoadAssetAtPath(texPath, typeof(Texture2D)) as Texture2D;

            if (tPackTexture != null)
            {
                //设置为Sprite
                TextureImporter         importer = SimplePacker.GetTextureImporter(tPackTexture);
                TextureImporterSettings settings = SimplePacker.GetTextureImporterSettings(tPackTexture);
                if (importer != null &&
                    settings != null)
                {
                    settings.ApplyTextureType(TextureImporterType.Advanced, false);
                    SimplePacker.SetTextureImporterSettings(tPackTexture, settings);

                    //要来回设置一下
                    settings.ApplyTextureType(TextureImporterType.Sprite, false);
                    settings.textureFormat = texImportFormat;
                    SimplePacker.SetTextureImporterSettings(tPackTexture, settings);
                }

                packTextureAttrSet.packTexture = tPackTexture;
                packTextureAttrSet.packSprite  = AssetDatabase.LoadAssetAtPath(texPath, typeof(Sprite)) as Sprite;
            }

            string attrSetPath = string.Format("{0}/{1}.asset", folder, fileName);
            //存在就更新,不能创建,会丢失引用
            PackTextureAttrSet tPacktextureAttrSet = AssetDatabase.LoadAssetAtPath(attrSetPath, typeof(PackTextureAttrSet)) as PackTextureAttrSet;

            if (tPacktextureAttrSet != null)
            {
                tPacktextureAttrSet.CopyForm(packTextureAttrSet);
                //修改引用为已经存在的Asset文件
                packTextureAttrSet = tPacktextureAttrSet;
            }
            else
            {
                AssetDatabase.CreateAsset(packTextureAttrSet, attrSetPath);
            }
        }