Пример #1
0
    private static UIAtlas SetAtlasInfo(GameObject go, AtlasConfig config, Material mat)
    {
        if (go == null || config == null || !config.IsUseful() || mat == null)
        {
            return(null);
        }
        TextAsset atlasTextAsset = AssetDatabase.LoadAssetAtPath <TextAsset>(config.AtlasTxtFilePath);

        if (atlasTextAsset != null)
        {
            UIAtlas uiAtlas = go.GetComponent <UIAtlas>();
            uiAtlas.spriteMaterial = mat;
            if (uiAtlas.texture != null)
            {
                NGUIEditorTools.ImportTexture(uiAtlas.texture, false, false, !uiAtlas.premultipliedAlpha);
            }

            uiAtlas.MarkAsChanged();

            NGUIJson.LoadSpriteData(uiAtlas, atlasTextAsset);
            uiAtlas.MarkAsChanged();

            return(uiAtlas);
        }
        return(null);
    }
Пример #2
0
    static void DoPackerCommond(AtlasConfig config)
    {
        if (config == null)
        {
            return;
        }
        string cmd = TexturePackerCommond.GetPackCommond(config.PhotosFolderPath, config.PhotoFullPath, config.AtlasTxtFullPath);

        ShellHelper.ShellRequest request = ShellHelper.ProcessCommand(cmd, null);
        EditorUtility.DisplayProgressBar("批量处理中...", "Shell脚本生成图集信息...", 0);
        request.onDone += () =>
        {
            if (replaceAtlasConfigList.Count > 0)
            {
                AtlasConfig next_config = replaceAtlasConfigList.Dequeue();
                DoPackerCommond(next_config);
            }
            else
            {
                EditorUtility.DisplayProgressBar("批量处理中...", "Shell脚本执行完毕...开始打图集...", 0);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
                BatchCreateUIAtlasPrefabs();
            }
        };
        request.onError += () =>
        {
            Debug.LogError("Texture Packer Error!!! Please Check Your Config");
        };
    }
Пример #3
0
        public AtlasPublisher()
        {
            var atlasCfg = new AtlasConfig("http://10.0.75.2", 7101);

            observer = new CommandMetricObserver(atlasCfg);
            observer.Run();
        }
Пример #4
0
    public static bool ShouldUseOutputAtlasTexture(string atlasName)
    {
        AtlasConfig config = null;

        if (s_configs.TryGetValue(atlasName, out config))
        {
            return(config.UseOutputAtlasTexture);
        }
        return(false);
    }
Пример #5
0
    public static bool ShouldKeepAlpha(string atlasName)
    {
        AtlasConfig config = null;

        if (s_configs.TryGetValue(atlasName, out config))
        {
            return(config.KeepAlpha);
        }
        return(false);
    }
Пример #6
0
    public static Object CreatePrefab(GameObject go, AtlasConfig config)
    {
        if (go == null || config == null || !config.IsUseful())
        {
            return(null);
        }
        Object tmpPrefab = PrefabUtility.CreateEmptyPrefab(config.AtlasOutputPath);

        tmpPrefab = PrefabUtility.ReplacePrefab(go, tmpPrefab, ReplacePrefabOptions.ConnectToPrefab);
        Object.DestroyImmediate(go);
        return(tmpPrefab);
    }
Пример #7
0
    public static void AddNextCall(string groupName, string spriteName, SpriteCreateNextCall callback, Texture2D texture, object atlas)
    {
        if (sGroupSprite.ContainsKey(groupName))
        {
            if (sGroupSprite[groupName].ContainsKey(spriteName))
            {
                callback(sGroupSprite[groupName][spriteName]);
                return;
            }
            else
            {
                if (sNextCallDic[groupName].ContainsKey(spriteName))
                {
                    if (!sNextCallDic[groupName][spriteName].Contains(callback))
                    {
                        sNextCallDic[groupName][spriteName].Add(callback);
                    }
                }
                else
                {
                    sNextCallDic[groupName][spriteName] = new List <SpriteCreateNextCall>()
                    {
                        callback
                    };
                    sGroupSpriteNameDic[groupName].Add(spriteName);
                }
            }
        }
        else
        {
            sGroupSprite[groupName]        = new Dictionary <string, Sprite>();
            sNextCallDic[groupName]        = new Dictionary <string, List <SpriteCreateNextCall> >();
            sGroupSpriteNameDic[groupName] = new List <string>()
            {
                spriteName
            };

            List <SpriteCreateNextCall> calls = new List <SpriteCreateNextCall>()
            {
                callback
            };

            sNextCallDic[groupName].Add(spriteName, calls);
            AtlasConfig config = new AtlasConfig();
            config.texture       = texture;
            config.atlas         = atlas;
            sAtlasDic[groupName] = config;
        }

        AsyncCreateGroup(groupName);
    }
Пример #8
0
    private static void CreateAtlas(AtlasConfig config)
    {
        if (config == null)
        {
            return;
        }
        if (!config.IsUseful())
        {
            Debug.LogError("Config :[" + config + "] Error ,Please check!!");
            return;
        }

        #region 第一步:修改图片设置
        TextureSetting(config.PhotoFilePath, TextureImporterType.Sprite);
        #endregion

        #region 第二步:根据图片创建材质
        Material mat = AssetDatabase.LoadAssetAtPath <Material>(config.MaterialOutputPath);
        if (mat == null)
        {
            mat = new Material(Shader.Find("Unlit/Transparent Colored"));
            AssetDatabase.CreateAsset(mat, config.MaterialOutputPath);
        }
        else
        {
            mat.shader = Shader.Find("Unlit/Transparent Colored");
        }
        mat.mainTexture = AssetDatabase.LoadAssetAtPath(config.PhotoFilePath, typeof(Texture2D)) as Texture2D;
        #endregion

        #region 第三步:创建预设
        GameObject go      = null;
        UIAtlas    uiAtlas = null;
        if ((go = AssetDatabase.LoadAssetAtPath(config.AtlasOutputPath, typeof(GameObject)) as GameObject) != null)
        {
            //已存在预制体
            uiAtlas = SetAtlasInfo(go, config, mat);
        }
        else
        {
            go = new GameObject(config.AtlasPrefabName);
            go.AddComponent <UIAtlas>();
            uiAtlas = SetAtlasInfo(go, config, mat);
            CreatePrefab(go, config);
        }
        #endregion
    }
Пример #9
0
    private static List <AtlasConfig> ParseAtlasConfig(string configFilePath)
    {
        if (string.IsNullOrEmpty(configFilePath))
        {
            return(null);
        }
        if (!File.Exists(configFilePath))
        {
            return(null);
        }
        List <AtlasConfig> configs = new List <AtlasConfig>();

        using (StreamReader sr = new StreamReader(configFilePath))
        {
            while (sr.Peek() >= 0)
            {
                string str = sr.ReadLine();
                if (!string.IsNullOrEmpty(str))
                {
                    string[] datas = str.Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries);
                    if (datas != null && datas.Length >= 3)
                    {
                        AtlasConfig config          = null;
                        string      photoFolderPath = datas[0];
                        photoFolderPath = Application.dataPath.Replace("Assets", artsFolder) + Path.DirectorySeparatorChar + photoFolderPath;
                        if (datas.Length == 3)
                        {
                            config = new AtlasConfig(photoFolderPath, datas[1], datas[2]);
                        }
                        else if (datas.Length == 5)
                        {
                            config = new AtlasConfig(photoFolderPath, datas[1], datas[2], datas[3], datas[4]);
                        }
                        configs.Add(config);
                    }
                }
            }
        }
        return(configs);
    }
Пример #10
0
        static public void AutoSetAtlasContents()
        {
            DirectoryInfo TarDirInfo = new DirectoryInfo(TarPath);
            var           allFiles   = TarDirInfo.GetFiles("*.spriteatlas", SearchOption.AllDirectories);

            foreach (FileInfo nFile in allFiles)
            {
                File.Delete(nFile.FullName);
            }

            DirectoryInfo rootDirInfo = new DirectoryInfo(OprPath);

            DirectoryInfo[] dirs = rootDirInfo.GetDirectories();

            AtlasConfigAsset   configAsset;
            List <AtlasConfig> configs;

            if (File.Exists(AtlasCongigPath))
            {
                configAsset = AssetDatabase.LoadAssetAtPath <AtlasConfigAsset>(AtlasCongigPath);
                configs     = new List <AtlasConfig>(configAsset.Configs);
            }
            else
            {
                configAsset = new AtlasConfigAsset();
                configs     = new List <AtlasConfig>();
            }

            int time = TimeUtility.GetTimeStampEx();

            foreach (DirectoryInfo dirInfo in dirs)
            {
                GeneratePerAtlas(dirInfo);
                if (configs.Find(p => p.Name == dirInfo.Name) == null)
                {
                    AtlasConfig config = new AtlasConfig();
                    config.ID   = time++;
                    config.Name = dirInfo.Name;
                    configs.Add(config);
                }
            }
            configAsset.Configs = configs.ToArray();
            if (File.Exists(AtlasCongigPath))
            {
                EditorUtility.SetDirty(configAsset);
            }
            else
            {
                AssetDatabase.CreateAsset(configAsset, AtlasCongigPath);
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("AtlasConfig =");
            sb.AppendLine("{");
            for (int i = 0; i < configs.Count; i++)
            {
                sb.AppendLine($"\t{configs[i].Name} = {configs[i].ID},");
            }
            sb.AppendLine("}");
            if (!File.Exists(LuaAtlasConfigPath))
            {
                //File.Delete(LuaAtlasConfigPath);
                File.Create(LuaAtlasConfigPath);
            }
            File.WriteAllText(LuaAtlasConfigPath, sb.ToString());

            //DirectoryInfo BigTexDirInfo = new DirectoryInfo(BigTexPath);
            //var allBigTexs = BigTexDirInfo.GetFiles("*.png", SearchOption.AllDirectories);
            //foreach (FileInfo pngFile in allBigTexs)
            //{
            //    string curName = pngFile.Name;
            //    int index = curName.IndexOf(".png");
            //    string ReName = "BigTex_" + curName.Substring(0, index);

            //    var FileName = TarPath + ReName;
            //    if (Directory.Exists(FileName))
            //    {
            //        Directory.Delete(FileName, true);
            //    }
            //    Directory.CreateDirectory(FileName);
            //    var AtlasName = FileName + "/" + ReName + ".spriteatlas";
            //    SpriteAtlas atlas = new SpriteAtlas();
            //    AssetDatabase.CreateAsset(atlas, AtlasName);
            //    AtlasSetting(atlas);
            //    string str = pngFile.FullName.Substring(pngFile.FullName.IndexOf("Assets"));
            //    atlas.Add(new[] { AssetDatabase.LoadAssetAtPath<Sprite>(str) });
            //    AssetDatabase.SaveAssets();
            //}
        }
Пример #11
0
 public AtlasPublisher()
 {
     var atlasCfg = new AtlasConfig("http://10.0.75.2", 7101);
     observer = new CommandMetricObserver(atlasCfg);
     observer.Run();
 }