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); } }