public static void CopySpriteAtlasSetting(SpriteAtlas target, SpriteAtlas template)
    {
        // 注意:默认设置为False
        target.SetIncludeInBuild(false);

        // 通用属性
        target.SetPackingSettings(template.GetPackingSettings());
        target.SetTextureSettings(template.GetTextureSettings());

        // 平台设置
        target.SetPlatformSettings(template.GetPlatformSettings("Standalone"));
        target.SetPlatformSettings(template.GetPlatformSettings("iPhone"));
        target.SetPlatformSettings(template.GetPlatformSettings("Android"));
    }
示例#2
0
        protected virtual void OnFirstImport(SpriteAtlas spriteAtlas)
        {
            spriteAtlas.SetIncludeInBuild(false);

            //------- PackingSettings -------

            var packingSettings = spriteAtlas.GetPackingSettings();

            SetPackingSettings(ref packingSettings);

            spriteAtlas.SetPackingSettings(packingSettings);

            //------- TextureSettings -------

            var textureSettings = spriteAtlas.GetTextureSettings();

            SetTextureSettings(ref textureSettings);

            spriteAtlas.SetTextureSettings(textureSettings);

            //------ PlatformSettings ------

            foreach (var platformName in DefaultTargetPlatforms)
            {
                var platformSetting = spriteAtlas.GetPlatformSettings(platformName.ToString());

                SetTexturePlatformSettings(ref platformSetting);

                spriteAtlas.SetPlatformSettings(platformSetting);
            }
        }
        public Dictionary <string, string> GetDefaultFields()
        {
            var defaultSetting  = spriteAtlas.GetTextureSettings();
            var packingSetting  = spriteAtlas.GetPackingSettings();
            var platformSetting = spriteAtlas.GetPlatformSettings("Default");

            var fieldMap = new Dictionary <string, string>
            {
                // Basic
                ["Path/Name"]  = Importer.assetPath,
                ["Atlas Type"] = spriteAtlas.isVariant ? "Variant" : "Master",

                // Packing
                ["Allow Rotation"] = packingSetting.enableRotation.ToString(),
                ["Tight Packing"]  = packingSetting.enableTightPacking.ToString(),
                ["Padding"]        = packingSetting.padding.ToString(),

                // Texture
                ["Read/Write Enabled"]   = defaultSetting.readable.ToString(),
                ["Generate Mip Maps"]    = defaultSetting.generateMipMaps.ToString(),
                ["sRGB (Color Texture)"] = defaultSetting.sRGB.ToString(),
                ["Max size"]             = platformSetting.maxTextureSize.ToString(),
            };

            if (Editor.EnableLog)
            {
                UnityEngine.Debug.Log(fieldMap.ToJson());
            }

            return(fieldMap);
        }
示例#4
0
        private void SetPlatformSetting(SpriteAtlas spriteAtlas)
        {
            TextureImporterPlatformSettings tips = spriteAtlas.GetPlatformSettings(Platform);

            tips.overridden     = true;
            tips.maxTextureSize = MaxSize;
            tips.format         = (TextureImporterFormat)(Format);
            spriteAtlas.SetPlatformSettings(tips);
        }
        private void Initialize()
        {
            spriteAtlas = EditorResources.Load <SpriteAtlas>(Importer.assetPath);

            foreach (var platform in Platforms)
            {
                platformMap[platform] = spriteAtlas.GetPlatformSettings(platform);
            }
        }
示例#6
0
    /// <summary>
    /// 复制图集设置
    /// </summary>
    public static void CopySpriteAtlasSetting(SpriteAtlas target, SpriteAtlas template)
    {
#if UNITY_2018_4_OR_NEWER
        // 注意:默认设置为False
        target.SetIncludeInBuild(false);

        // 通用属性
        target.SetPackingSettings(template.GetPackingSettings());
        target.SetTextureSettings(template.GetTextureSettings());

        // 平台设置
        target.SetPlatformSettings(template.GetPlatformSettings("Standalone"));
        target.SetPlatformSettings(template.GetPlatformSettings("iPhone"));
        target.SetPlatformSettings(template.GetPlatformSettings("Android"));
#else
        Debug.LogWarning($"{Application.unityVersion} is not support copy sprite atlas setting. Please upgrade to unity2018.4 or newer.");
#endif
    }
示例#7
0
        private static bool CheckPlatformSettings(SpriteAtlas atlas, SpriteAtlasSettings settings, BuildTargetGroup buildTargetGroup)
        {
            var atlasPlatformSettings = atlas.GetPlatformSettings(buildTargetGroup.ToString());
            var platformSettings      = settings.ImportSettings.GetTextureImporterPlatformSettings(buildTargetGroup);

            return(atlasPlatformSettings.textureCompression == platformSettings.textureCompression &&
                   atlasPlatformSettings.maxTextureSize == platformSettings.maxTextureSize &&
                   atlasPlatformSettings.format == platformSettings.format &&
                   atlasPlatformSettings.crunchedCompression == platformSettings.crunchedCompression &&
                   atlasPlatformSettings.compressionQuality == platformSettings.compressionQuality);
        }
        static void SetPlatformSettings(string platform, SpriteAtlas spriteAtlas, SoSpriteAtlasPostprocessor so)
        {
            var soPlatformSettings = so.GetPlatformSettings(platform);
            var platformSettings   = spriteAtlas.GetPlatformSettings(platform);

            platformSettings.overridden         = soPlatformSettings.overridden;
            platformSettings.format             = (TextureImporterFormat)soPlatformSettings.format;
            platformSettings.maxTextureSize     = soPlatformSettings.maxTextureSize;
            platformSettings.compressionQuality = (int)soPlatformSettings.compressionQuality;
            spriteAtlas.SetPlatformSettings(platformSettings);
        }
        public static string[] Export(SpriteAtlas atlas, string dirPath)
        {
            string platformName = "Standalone";

            if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
            {
                platformName = "Android";
            }
            else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
            {
                platformName = "iPhone";
            }

            TextureImporterPlatformSettings tips       = atlas.GetPlatformSettings(platformName);
            TextureImporterPlatformSettings cachedTips = new TextureImporterPlatformSettings();

            tips.CopyTo(cachedTips);

            tips.overridden = true;
            tips.format     = TextureImporterFormat.RGBA32;
            //tips.maxTextureSize = 1024;
            atlas.SetPlatformSettings(tips);

            List <string> texturePathList = new List <string>();

            SpriteAtlasUtility.PackAtlases(new SpriteAtlas[] { atlas }, EditorUserBuildSettings.activeBuildTarget);
            MethodInfo getPreviewTextureMI = typeof(SpriteAtlasExtensions).GetMethod("GetPreviewTextures", BindingFlags.Static | BindingFlags.NonPublic);

            Texture2D[] atlasTextures = (Texture2D[])getPreviewTextureMI.Invoke(null, new SystemObject[] { atlas });
            if (atlasTextures != null && atlasTextures.Length > 0)
            {
                for (int i = 0; i < atlasTextures.Length; i++)
                {
                    Texture2D packTexture = atlasTextures[i];
                    byte[]    rawBytes    = packTexture.GetRawTextureData();

                    Texture2D nTexture = new Texture2D(packTexture.width, packTexture.height, packTexture.format, false, false);
                    nTexture.LoadRawTextureData(rawBytes);
                    nTexture.Apply();
                    string textPath = string.Format("{0}/{1}_{2}.png", dirPath, atlas.name, i);
                    File.WriteAllBytes(textPath, nTexture.EncodeToPNG());

                    texturePathList.Add(textPath);
                }
            }

            atlas.SetPlatformSettings(cachedTips);

            return(texturePathList.ToArray());
        }
示例#10
0
        static void SettingPlat(SpriteAtlas sa, string plat)
        {
            //设置iphone平台的贴图压缩
            TextureImporterPlatformSettings setting = sa.GetPlatformSettings(plat);

            if (setting == null)
            {
                setting = new TextureImporterPlatformSettings();
            }

            setting.overridden         = true;
            setting.format             = TextureImporterFormat.ASTC_RGBA_4x4;
            setting.compressionQuality = 100;
            sa.SetPlatformSettings(setting);
        }
        static bool ComparePlatformSetting(string platform, SoSpriteAtlasPostprocessor texturePostprocessorBase, SpriteAtlas spriteAtlas, ref string message)
        {
            var so = texturePostprocessorBase.GetPlatformSettings(platform);
            var texturePlatformSettings = spriteAtlas.GetPlatformSettings(platform);
            var same     = true;
            var sameInfo = string.Empty;

            if (so.overridden != texturePlatformSettings.overridden)
            {
                same     = false;
                sameInfo = StringUtil.Contact(sameInfo, "\n", "overridden");
            }

            if (so.overridden && texturePlatformSettings.overridden)
            {
                if (so.format != (int)texturePlatformSettings.format)
                {
                    same     = false;
                    sameInfo = StringUtil.Contact(sameInfo, "\n", "format");
                }

                if ((int)so.compressionQuality != texturePlatformSettings.compressionQuality)
                {
                    same     = false;
                    sameInfo = StringUtil.Contact(sameInfo, "\n", "compressionQuality");
                }

                if (so.maxTextureSize != texturePlatformSettings.maxTextureSize)
                {
                    same     = false;
                    sameInfo = StringUtil.Contact(sameInfo, "\n", "maxTextureSize");
                }
            }

            if (!same)
            {
                message = StringUtil.Contact(message, "\n", "<b>platform: ", platform, "</b>", sameInfo);
            }

            return(same);
        }
        protected virtual void OnFirstImport(SpriteAtlas spriteAtlas)
        {
            spriteAtlas.SetIncludeInBuild(false);

            //------- PackingSettings -------

            var packingSettings = spriteAtlas.GetPackingSettings();

            packingSettings.padding            = 2;
            packingSettings.enableTightPacking = false;
            packingSettings.enableRotation     = false;

            spriteAtlas.SetPackingSettings(packingSettings);

            //------- TextureSettings -------

            var textureSettings = spriteAtlas.GetTextureSettings();

            textureSettings.readable        = false;
            textureSettings.generateMipMaps = false;

            spriteAtlas.SetTextureSettings(textureSettings);

            //------ PlatformSettings ------

            foreach (var platformName in DefaultTargetPlatforms)
            {
                var platformSetting = spriteAtlas.GetPlatformSettings(platformName.ToString());

                platformSetting.overridden     = true;
                platformSetting.format         = TextureImporterFormat.ASTC_RGBA_4x4;
                platformSetting.maxTextureSize = 1024;

                spriteAtlas.SetPlatformSettings(platformSetting);
            }
        }
示例#13
0
    static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
    {
        for (int i = 0; i < importedAssets.Length; i++)
        {
            string assetPath = importedAssets[i].Replace("\\", "/");
            if (!assetPath.StartsWith("Assets/Localization/") && !assetPath.StartsWith("Assets/Res/"))
            {
                continue;
            }
            if (!AssetDatabase.IsValidFolder(assetPath))
            {
                continue;                                          //非文件夹文件
            }
            DirectoryInfo dirAssetInfo = new DirectoryInfo(assetPath);
            for (int j = 0; j < _atlasRuleDir.Length; j++)
            {
                AtlasInfo atlasInfo_Rule = _atlasRuleDir[j];
                if (!assetPath.Equals(atlasInfo_Rule.dir) && !assetPath.StartsWith(atlasInfo_Rule.dir + "/"))
                {
                    continue;
                }
                //命中目标文件夹
                if (dirAssetInfo.Parent.FullName.Equals(atlasInfo_Rule.fullName))
                {
                    FileInfo[] atlasFiles  = dirAssetInfo.GetFiles("*.spriteatlas", SearchOption.AllDirectories);
                    FileInfo   targetAtlas = null; //文件夹下直属Atlas
                    for (int k = 0; k < atlasFiles.Length; k++)
                    {
                        FileInfo file = atlasFiles[k];
                        if (targetAtlas == null)
                        {
                            if (file.Directory.FullName.Equals(dirAssetInfo.FullName))
                            {
                                targetAtlas = file;
                            }
                        }
                        else
                        {
                            file.Delete(); //删除其他的Atlas
                        }
                    }

                    string targetName = atlasInfo_Rule.prefix_name + "_" + dirAssetInfo.Name + "_Atlas.spriteatlas";
                    if (targetAtlas == null) //没有找到直属Atlas
                    {
                        AssetDatabase.CreateAsset(new SpriteAtlas(), assetPath + "/" + targetName);
                        targetAtlas = new FileInfo(dirAssetInfo.FullName + "/" + targetName);
                    }
                    else
                    {
                        AssetDatabase.RenameAsset(assetPath + "/" + targetAtlas.Name, targetName); //改名
                        targetAtlas = new FileInfo(dirAssetInfo.FullName + "/" + targetName);
                    }
                    //对Atlas进行设置
                    SpriteAtlas atlas = AssetDatabase.LoadAssetAtPath <SpriteAtlas>(assetPath + "/" + targetAtlas.Name);
                    SpriteAtlasPackingSettings packingSettings = atlas.GetPackingSettings();
                    packingSettings.enableRotation     = atlasInfo_Rule.isRotation;
                    packingSettings.enableTightPacking = atlasInfo_Rule.isTight;
                    packingSettings.padding            = 2;
                    atlas.SetPackingSettings(packingSettings);

                    TextureImporterPlatformSettings platformSettings = atlas.GetPlatformSettings("iPhone");
                    platformSettings.overridden = true;
                    if (platformSettings.maxTextureSize > 2048)
                    {
                        platformSettings.maxTextureSize = 2048;
                    }
                    platformSettings.format = TextureImporterFormat.ASTC_RGBA_6x6;
                    atlas.SetPlatformSettings(platformSettings);

                    atlas.Remove(atlas.GetPackables());
                    atlas.Add(new [] { AssetDatabase.LoadAssetAtPath <Object>(assetPath) });
                }
                break;
            }
        }
    }
示例#14
0
        //================================================================================
        // 関数
        //================================================================================
        /// <summary>
        /// 指定された TextureImporter に設定を適用します
        /// </summary>
        public void Apply(SpriteAtlas spriteAtlas)
        {
            var packingSettings = spriteAtlas.GetPackingSettings();

            if (m_enableRotation.IsOverride)
            {
                packingSettings.enableRotation = m_enableRotation.Value;
            }

            if (m_enableTightPacking.IsOverride)
            {
                packingSettings.enableTightPacking = m_enableTightPacking.Value;
            }

            if (m_padding.IsOverride)
            {
                packingSettings.padding = m_padding.Value;
            }

            spriteAtlas.SetPackingSettings(packingSettings);

            var textureSettings = spriteAtlas.GetTextureSettings();

            if (m_readable.IsOverride)
            {
                textureSettings.readable = m_readable.Value;
            }

            if (m_generateMipMaps.IsOverride)
            {
                textureSettings.generateMipMaps = m_generateMipMaps.Value;
            }

            if (m_sRGB.IsOverride)
            {
                textureSettings.sRGB = m_sRGB.Value;
            }

            if (m_filterMode.IsOverride)
            {
                textureSettings.filterMode = m_filterMode.Value;
            }

            if (m_anisoLevel.IsOverride)
            {
                textureSettings.anisoLevel = m_anisoLevel.Value;
            }

            spriteAtlas.SetTextureSettings(textureSettings);

            if (m_defaultSettings != null)
            {
                var platformSettings = spriteAtlas.GetPlatformSettings("DefaultTexturePlatform");
                m_defaultSettings.Apply(platformSettings);
                spriteAtlas.SetPlatformSettings(platformSettings);
            }

            if (m_standaloneSettings != null)
            {
                var platformSettings = spriteAtlas.GetPlatformSettings("Standalone");
                m_standaloneSettings.Apply(platformSettings);
                spriteAtlas.SetPlatformSettings(platformSettings);
            }

            if (m_iPhoneSettings != null)
            {
                var platformSettings = spriteAtlas.GetPlatformSettings("iPhone");
                platformSettings.overridden = true;
                m_iPhoneSettings.Apply(platformSettings);
                spriteAtlas.SetPlatformSettings(platformSettings);
            }

            if (m_androidSettings != null)
            {
                var platformSettings = spriteAtlas.GetPlatformSettings("Android");
                m_androidSettings.Apply(platformSettings);
                spriteAtlas.SetPlatformSettings(platformSettings);
            }

            if (m_webGLSettings != null)
            {
                var platformSettings = spriteAtlas.GetPlatformSettings("WebGL");
                m_webGLSettings.Apply(platformSettings);
                spriteAtlas.SetPlatformSettings(platformSettings);
            }
        }
示例#15
0
        public static void CreateSpriteAtlas(string src_path, string dst_path, string atlas_name, bool includeInBuild = true)
        {
            if (string.IsNullOrEmpty(src_path) || string.IsNullOrEmpty(dst_path) || string.IsNullOrEmpty(atlas_name))
            {
                Log.LogError($"无法创建图集,路径为空. src_path={src_path} ,dst_path={dst_path} ,atlas_name={atlas_name}");
                return;
            }

            if (!src_path.EndsWith("/"))
            {
                src_path = src_path + "/";
            }
            var full_path = Path.GetFullPath(src_path);

            if (!Directory.Exists(full_path))
            {
                Log.Info($"不创建图集,{src_path}下无atlas文件夹");
                return;
            }
            var assets = Directory.GetFiles(full_path, "*.png"); //这里无法过滤两种类型 *.png|*.jpg

            if (assets == null || assets.Length == 0)
            {
                Log.Info($"{src_path}下无图片,不生成图集");
                return;
            }

            SpriteAtlas spriteAtlas = new SpriteAtlas();

            if (!dst_path.EndsWith("/"))
            {
                dst_path = dst_path + "/";
            }
            if (!Directory.Exists(dst_path))
            {
                Directory.CreateDirectory(dst_path);
            }
            AssetDatabase.CreateAsset(spriteAtlas, dst_path + atlas_name + ".spriteatlas");
            foreach (var path in assets)
            {
                var t = src_path + Path.GetFileName(path);
                var o = AssetDatabase.LoadAssetAtPath <Sprite>(t);
                if (o != null)
                {
                    SpriteAtlasExtensions.Add(spriteAtlas, new Object[] { o });
                }
            }

            //TODO 根据平台设置图集格式 //EditorUserBuildSettings.activeBuildTarget
            var atlasSetting = spriteAtlas.GetPlatformSettings(KResourceModule.GetBuildPlatformName());

            atlasSetting.maxTextureSize     = 2048;
            atlasSetting.textureCompression = TextureImporterCompression.Compressed;
            atlasSetting.format             = TextureImporterFormat.Automatic;
            spriteAtlas.SetIncludeInBuild(includeInBuild);
            spriteAtlas.SetPlatformSettings(atlasSetting);

            SpriteAtlasUtility.PackAtlases(new SpriteAtlas[] { spriteAtlas }, EditorUserBuildSettings.activeBuildTarget, false);
            AssetDatabase.SaveAssets();
            Log.Info($"创建图集{spriteAtlas.name}完成,包含{spriteAtlas.spriteCount}个图片");
        }
示例#16
0
        private static void ExportAltas()
        {
            if (Selection.objects == null || Selection.objects.Length == 0)
            {
                return;
            }
            string platformName = "Standalone";

            if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
            {
                platformName = "Android";
            }
            else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
            {
                platformName = "iPhone";
            }
            List <SpriteAtlas> atlasList = new List <SpriteAtlas>();
            Dictionary <SpriteAtlas, TextureImporterPlatformSettings> tipsDic = new Dictionary <SpriteAtlas, TextureImporterPlatformSettings>();

            foreach (UnityObject uObj in Selection.objects)
            {
                SpriteAtlas atlas = uObj as SpriteAtlas;
                if (atlas != null)
                {
                    atlasList.Add(atlas);

                    TextureImporterPlatformSettings tips  = atlas.GetPlatformSettings(platformName);
                    TextureImporterPlatformSettings ntips = new TextureImporterPlatformSettings();
                    tips.CopyTo(ntips);
                    tipsDic.Add(atlas, ntips);

                    tips.overridden = true;
                    tips.format     = TextureImporterFormat.RGBA32;
                    atlas.SetPlatformSettings(tips);
                }
            }
            if (atlasList.Count == 0)
            {
                EditorUtility.DisplayDialog("Warning", "Can't Found Sprite Atlas In Selection", "OK");
                return;
            }
            UnityEditor.U2D.SpriteAtlasUtility.PackAtlases(atlasList.ToArray(), EditorUserBuildSettings.activeBuildTarget);
            string outputDirPath = EditorUtility.OpenFolderPanel("Save Atlas To", "D:/", "");

            if (string.IsNullOrEmpty(outputDirPath))
            {
                EditorUtility.DisplayDialog("Warning", "Please Choose a Folder", "OK");
                return;
            }

            MethodInfo getPreviewTextureMI = typeof(SpriteAtlasExtensions).GetMethod("GetPreviewTextures", BindingFlags.Static | BindingFlags.NonPublic);

            foreach (SpriteAtlas atlas in atlasList)
            {
                Texture2D[] atlasTextures = (Texture2D[])getPreviewTextureMI.Invoke(null, new SystemObject[] { atlas });
                if (atlasTextures != null && atlasTextures.Length > 0)
                {
                    for (int i = 0; i < atlasTextures.Length; i++)
                    {
                        Texture2D packTexture = atlasTextures[i];
                        byte[]    rawBytes    = packTexture.GetRawTextureData();

                        Texture2D nTexture = new Texture2D(packTexture.width, packTexture.height, packTexture.format, false, false);
                        nTexture.LoadRawTextureData(rawBytes);
                        nTexture.Apply();
                        string textPath = string.Format("{0}/{1}_{2}.png", outputDirPath, atlas.name, i);
                        File.WriteAllBytes(textPath, nTexture.EncodeToPNG());
                    }
                }
            }

            foreach (var kvp in tipsDic)
            {
                kvp.Key.SetPlatformSettings(kvp.Value);
            }
        }