Exemple #1
0
        public static void FindRGBA()
        {
            TextureImporterFormat[] formatConfig = new TextureImporterFormat[]
            {
                TextureImporterFormat.RGBA32,
                TextureImporterFormat.RGB24,
                TextureImporterFormat.ARGB32,
            };

            HashSet <TextureImporterFormat> filter = new HashSet <TextureImporterFormat>(formatConfig);

            foreach (string atlasFile in EditorResourcePaths.GetAllAtlasFiles())
            {
                if (atlasFile.EndsWith(LOW_ATLAS_SUFFIX))
                {
                    continue;
                }

                SpriteAtlas spriteAtlas = AssetDatabase.LoadAssetAtPath <SpriteAtlas>(atlasFile);
                for (int i = 2; i < PLATFORMS.Length; i++)
                {
                    TextureImporterPlatformSettings patformSettings = SpriteAtlasExtensions.GetPlatformSettings(spriteAtlas, PLATFORMS[i]);
                    if (patformSettings.overridden && filter.Contains(patformSettings.format))
                    {
                        DebugUtil.LogWarning("高清图集 : " + atlasFile);
                        break;
                    }
                }
            }

            DebugUtil.Log("FindRGBA Done!");
        }
Exemple #2
0
 public static void SetTextureFormat()
 {
     HandleTextureFormat(EditorResourcePaths.GetSpriteFiles(), SetResourcesFormat);
     HandleTextureFormat(EditorResourcePaths.GetRawTextureFiles(), SetRawTextureFormat);
     HandleSpriteAtlasFormat(EditorResourcePaths.GetAtlasFiles());
     DebugUtil.Log("SetTextureFormat Done!");
 }
Exemple #3
0
 static void ToBytesBySelect()
 {
     foreach (string file in EditorResourcePaths.GetFileSelections())
     {
         string newFile = file.Replace(EditorCommonUtils.GetExtension(file), ".bytes");
         EditorCommonUtils.MoveFile(file, newFile);
     }
 }
Exemple #4
0
 static void FilterAlphaBySelect()
 {
     foreach (string file in EditorResourcePaths.GetTextureFiles(EditorResourcePaths.GetFileSelections()))
     {
         FilterTextureAlpha(file);
     }
     AssetDatabase.Refresh();
 }
Exemple #5
0
 static void CheckConflictBySelect()
 {
     foreach (string file in EditorResourcePaths.GetFileSelections())
     {
         string text = System.IO.File.ReadAllText(file);
         if (text.IndexOf(">>>>>>>") != -1)
         {
             DebugUtil.LogWarning(file + " is Conflict");
         }
     }
 }
Exemple #6
0
 static void CheckAlphaBySelect()
 {
     foreach (string file in EditorResourcePaths.GetTextureFiles(EditorResourcePaths.GetFileSelections()))
     {
         Texture2D texture = EditorCommonUtils.ReadTexture(file);
         if (ContainAlpha(texture))
         {
             DebugUtil.LogWarning("该图片包含透明通道: " + file);
         }
     }
 }
Exemple #7
0
 public static void CheckETC2()
 {
     foreach (string file in EditorResourcePaths.GetSpriteFiles())
     {
         Texture2D texture = EditorCommonUtils.ReadTexture(file);
         if (texture.width % 4 != 0 || texture.height % 4 != 0)
         {
             DebugUtil.LogWarning("该图片不满足Android的压缩格式 : " + file);
         }
     }
     DebugUtil.Log("CheckETC2 Done!");
 }
Exemple #8
0
        static void FindExternalDependenciesBySelect()
        {
            List <string> selections = EditorResourcePaths.GetAllSelections(SelectionMode.DeepAssets);
            Dictionary <string, List <string> > referenceDict = new Dictionary <string, List <string> >();

            EditorResourcePaths.GetExternalDependencies(selections, selections, null, referenceDict);
            foreach (string file in referenceDict.Keys)
            {
                Debug.LogWarning("Depend On " + file);
                foreach (string reference in referenceDict[file])
                {
                    Debug.Log(" In " + reference);
                }
            }
        }
Exemple #9
0
        static void CheckPrefabBySelect()
        {
            var atlasSprites = EditorResourcePaths.GetAllSpriteFilesInAtlas();

            foreach (string file in EditorResourcePaths.GetFileSelections())
            {
                if (file.EndsWith(".prefab"))
                {
                    var sprites = EditorResourcePaths.GetDependencies(new string[] { file }, EditorResourcePaths.PNG_REGEX);
                    foreach (var sprite in sprites)
                    {
                        if (!atlasSprites.Contains(sprite))
                        {
                            DebugUtil.LogWarning(file + " 包含散图 " + sprite);
                        }
                    }
                }
            }
        }
Exemple #10
0
        static void FindReferencesBySelect()
        {
            var dependenciesDict = new Dictionary <string, HashSet <string> >();

            foreach (var prefab in EditorResourcePaths.GetAllPrefabFiles())
            {
                dependenciesDict[prefab] = new HashSet <string>(AssetDatabase.GetDependencies(prefab, false));
            }

            HashSet <string> fileSet = new HashSet <string>(EditorResourcePaths.GetFileSelections());

            foreach (string file in fileSet)
            {
                foreach (string prefab in dependenciesDict.Keys)
                {
                    if (!fileSet.Contains(prefab) && dependenciesDict[prefab].Contains(file))
                    {
                        DebugUtil.LogWarning(file + " References By " + prefab);
                    }
                }
            }
        }
Exemple #11
0
        static void CheckMapDependencies()
        {
            string mapRoot = "Assets/Export/UI/";

            foreach (string path in FilePathTools.GetDirectories(mapRoot, "Map"))
            {
                string   name  = path.Replace(mapRoot, "") + "/";
                string[] files = FilePathTools.GetFiles(path, ".*", System.IO.SearchOption.AllDirectories);
                Dictionary <string, List <string> > dependencyDict = new Dictionary <string, List <string> >();
                List <string> selections = new List <string>(files);
                EditorResourcePaths.GetExternalDependencies(selections, selections, dependencyDict);
                foreach (string selection in dependencyDict.Keys)
                {
                    dependencyDict[selection].ForEach((param) =>
                    {
                        if ((param.IndexOf("Res/Maps/") != -1 || param.IndexOf("Export/UI/Map") != -1) && param.IndexOf(name) == -1 && param.IndexOf("MapCom") == -1)
                        {
                            Debug.LogWarning(selection + "  Depend on : " + param);
                        }
                    });
                }
            }
        }
Exemple #12
0
        static void HandleSpriteAtlasFormat(HashSet <string> atlasFiles)
        {
            string[]      atlasFileArray   = new string[ATLAS_TYPE_NUMBER];
            SpriteAtlas[] spriteAtlasArray = new SpriteAtlas[ATLAS_TYPE_NUMBER];
            SpriteAtlasPackingSettings[] packingSettingsArray = new SpriteAtlasPackingSettings[ATLAS_TYPE_NUMBER];
            SpriteAtlasTextureSettings[] textureSettingsArray = new SpriteAtlasTextureSettings[ATLAS_TYPE_NUMBER];
            Dictionary <string, TextureImporterPlatformSettings>[] platformSettingsDictArray = new Dictionary <string, TextureImporterPlatformSettings> [ATLAS_TYPE_NUMBER];
            platformSettingsDictArray[0] = new Dictionary <string, TextureImporterPlatformSettings>();
            platformSettingsDictArray[1] = new Dictionary <string, TextureImporterPlatformSettings>();

            foreach (string file in atlasFiles)
            {
                if (file.EndsWith(LOW_ATLAS_SUFFIX))
                {
                    continue;
                }

                atlasFileArray[0] = file;
                atlasFileArray[1] = file.Replace(EditorResourcePaths.ATLAS_SUFFIX, LOW_ATLAS_SUFFIX);

                for (int i = 0; i < ATLAS_TYPE_NUMBER; i++)
                {
                    spriteAtlasArray[i]     = AssetDatabase.LoadAssetAtPath <SpriteAtlas>(atlasFileArray[i]);
                    packingSettingsArray[i] = SpriteAtlasExtensions.GetPackingSettings(spriteAtlasArray[i]);
                    textureSettingsArray[i] = SpriteAtlasExtensions.GetTextureSettings(spriteAtlasArray[i]);
                    foreach (string platform in PLATFORMS)
                    {
                        platformSettingsDictArray[i][platform] = SpriteAtlasExtensions.GetPlatformSettings(spriteAtlasArray[i], platform);
                    }
                }

                HashSet <string> spriteSet    = EditorResourcePaths.GetDependencies(atlasFileArray, EditorResourcePaths.PNG_REGEX);
                bool             containAlpha = false;
                foreach (string spriteFile in spriteSet)
                {
                    Texture2D texture = EditorCommonUtils.ReadTexture(spriteFile);
                    if (ContainAlpha(texture))
                    {
                        containAlpha = true;
                        break;
                    }
                }

                for (int i = 0; i < ATLAS_TYPE_NUMBER; i++)
                {
                    packingSettingsArray[i].enableRotation     = false;
                    packingSettingsArray[i].enableTightPacking = false;
                    SetDefaultTextureSettings(ref textureSettingsArray[i]);
                }

                if (containAlpha)
                {
                    SetPlatformTextureSettings(platformSettingsDictArray[0]["Default"], "Default", TextureImporterFormat.RGBA32);
                    SetPlatformTextureSettings(platformSettingsDictArray[0]["Standalone"], "Standalone", TextureImporterFormat.DXT5);
                    SetPlatformTextureSettings(platformSettingsDictArray[0]["Android"], "Android", TextureImporterFormat.ETC2_RGBA8);
                    SetPlatformTextureSettings(platformSettingsDictArray[0]["iPhone"], "iPhone", IOS_NEW_RGBA);

                    SetPlatformTextureSettings(platformSettingsDictArray[1]["Default"], "Default", TextureImporterFormat.RGBA32);
                    SetPlatformTextureSettings(platformSettingsDictArray[1]["Standalone"], "Standalone", TextureImporterFormat.DXT5Crunched);
                    SetPlatformTextureSettings(platformSettingsDictArray[1]["Android"], "Android", TextureImporterFormat.ETC2_RGBA8Crunched);
                    SetPlatformTextureSettings(platformSettingsDictArray[1]["iPhone"], "iPhone", TextureImporterFormat.PVRTC_RGBA4);
                }
                else
                {
                    SetPlatformTextureSettings(platformSettingsDictArray[0]["Default"], "Default", TextureImporterFormat.RGB24);
                    SetPlatformTextureSettings(platformSettingsDictArray[0]["Standalone"], "Standalone", TextureImporterFormat.DXT1);
                    SetPlatformTextureSettings(platformSettingsDictArray[0]["Android"], "Android", TextureImporterFormat.ETC2_RGB4);
                    SetPlatformTextureSettings(platformSettingsDictArray[0]["iPhone"], "iPhone", TextureImporterFormat.PVRTC_RGB4);

                    SetPlatformTextureSettings(platformSettingsDictArray[1]["Default"], "Default", TextureImporterFormat.RGB24);
                    SetPlatformTextureSettings(platformSettingsDictArray[1]["Standalone"], "Standalone", TextureImporterFormat.DXT1Crunched);
                    SetPlatformTextureSettings(platformSettingsDictArray[1]["Android"], "Android", TextureImporterFormat.ETC_RGB4Crunched);
                    SetPlatformTextureSettings(platformSettingsDictArray[1]["iPhone"], "iPhone", TextureImporterFormat.PVRTC_RGB4);
                }

                for (int i = 0; i < ATLAS_TYPE_NUMBER; i++)
                {
                    SpriteAtlasExtensions.SetIncludeInBuild(spriteAtlasArray[i], false);
                    SpriteAtlasExtensions.SetPackingSettings(spriteAtlasArray[i], packingSettingsArray[i]);
                    SpriteAtlasExtensions.SetTextureSettings(spriteAtlasArray[i], textureSettingsArray[i]);
                    foreach (string platform in PLATFORMS)
                    {
                        SpriteAtlasExtensions.SetPlatformSettings(spriteAtlasArray[i], platformSettingsDictArray[i][platform]);
                    }
                }
                SpriteAtlasExtensions.SetIsVariant(spriteAtlasArray[1], false);
                SpriteAtlasExtensions.Remove(spriteAtlasArray[1], SpriteAtlasExtensions.GetPackables(spriteAtlasArray[1]));
                SpriteAtlasExtensions.Add(spriteAtlasArray[1], SpriteAtlasExtensions.GetPackables(spriteAtlasArray[0]));
            }
            AssetDatabase.Refresh();
        }
Exemple #13
0
        public static void SetAtlasMaxSize()
        {
            MethodInfo getPreviewTexturesMI = typeof(SpriteAtlasExtensions).GetMethod("GetPreviewTextures", BindingFlags.Static | BindingFlags.NonPublic);

            foreach (string atlasFile in EditorResourcePaths.GetAllAtlasFiles())
            {
                if (atlasFile.EndsWith(LOW_ATLAS_SUFFIX))
                {
                    continue;
                }

                SpriteAtlas   spriteAtlas = AssetDatabase.LoadAssetAtPath <SpriteAtlas>(atlasFile);
                List <Sprite> sprites     = GetSpritesByAtlas(spriteAtlas);

                // 统计散图面积之和
                int total   = 0;
                int minSize = 128;
                foreach (Sprite sprite in sprites)
                {
                    Rect rect   = sprite.textureRect;
                    int  width  = Mathf.CeilToInt(rect.width);
                    int  height = Mathf.CeilToInt(rect.height);
                    minSize = Mathf.Max(minSize, width, height);
                    total  += width * height;
                }

                // 估算maxTextureSize值
                float guessArea = EditorCommonUtils.ToLargerPOT(total, 4);
                int   guessSize = Mathf.RoundToInt(Mathf.Sqrt(guessArea));

                // 如果填充率太低,将估值尺寸减半
                if (total <= guessArea * 0.625f)
                {
                    guessSize /= 2;
                }

                // 用估值尺寸尝试打图集
                guessSize = Mathf.Max(guessSize, Mathf.RoundToInt(EditorCommonUtils.ToLargerPOT(minSize, 2)));
                foreach (string platform in PLATFORMS)
                {
                    TextureImporterPlatformSettings patformSettings = SpriteAtlasExtensions.GetPlatformSettings(spriteAtlas, platform);
                    if (patformSettings.maxTextureSize != guessSize)
                    {
                        patformSettings.maxTextureSize = guessSize;
                        SpriteAtlasExtensions.SetPlatformSettings(spriteAtlas, patformSettings);
                    }
                }
                SpriteAtlasUtility.PackAtlases(new SpriteAtlas[] { spriteAtlas }, EditorUserBuildSettings.activeBuildTarget);

                // 计算图集的实际面积
                Texture2D[] atlasTextures = (Texture2D[])getPreviewTexturesMI.Invoke(null, new object[] { spriteAtlas });
                int         area          = 0;
                for (int i = 0; i < atlasTextures.Length; i++)
                {
                    area += atlasTextures[i].width * atlasTextures[i].height;
                }

                // 如果估值尺寸效果一般,将其翻倍
                if (area > guessSize * guessSize * 2.5f)
                {
                    foreach (string platform in PLATFORMS)
                    {
                        TextureImporterPlatformSettings patformSettings = SpriteAtlasExtensions.GetPlatformSettings(spriteAtlas, platform);
                        patformSettings.maxTextureSize = Mathf.Min(guessSize * 2, MAX_TEXTURE_SIZE);
                        SpriteAtlasExtensions.SetPlatformSettings(spriteAtlas, patformSettings);
                    }
                    SpriteAtlasUtility.PackAtlases(new SpriteAtlas[] { spriteAtlas }, EditorUserBuildSettings.activeBuildTarget);
                }
                else if (area > guessSize * guessSize * 1.5f && area <= guessSize * guessSize * 2)
                {
                    TextureImporterPlatformSettings patformSettings = SpriteAtlasExtensions.GetPlatformSettings(spriteAtlas, "Android");
                    patformSettings.maxTextureSize = Mathf.Min(guessSize * 2, MAX_TEXTURE_SIZE);
                    SpriteAtlasExtensions.SetPlatformSettings(spriteAtlas, patformSettings);
                    SpriteAtlasUtility.PackAtlases(new SpriteAtlas[] { spriteAtlas }, EditorUserBuildSettings.activeBuildTarget);
                }

                SpriteAtlas lowSpriteAtlas = AssetDatabase.LoadAssetAtPath <SpriteAtlas>(atlasFile.Replace(EditorResourcePaths.ATLAS_SUFFIX, LOW_ATLAS_SUFFIX));
                foreach (string platform in PLATFORMS)
                {
                    TextureImporterPlatformSettings patformSettings    = SpriteAtlasExtensions.GetPlatformSettings(spriteAtlas, platform);
                    TextureImporterPlatformSettings lowPatformSettings = SpriteAtlasExtensions.GetPlatformSettings(lowSpriteAtlas, platform);
                    lowPatformSettings.maxTextureSize = patformSettings.maxTextureSize;
                    SpriteAtlasExtensions.SetPlatformSettings(lowSpriteAtlas, lowPatformSettings);
                }
            }
            DebugUtil.Log("SetAtlasMaxSize Done!");
        }