private bool ApplySerializeObject(AtlasSerializeObject obj) {//获取持久化对象 bool bRet = true; if (obj == null) { return(false); } //获取Atlas输出路径 AtlasSavePath = obj.AtlasOutputPath; spriteImages.Clear(); //获取小图信息 foreach (var ImageInfo in obj.SpriteInfoTable) { AtlasSpriteImage image = new AtlasSpriteImage(); image.Name = ImageInfo.Key; image.Path = UIAtlasEditorConfig.ImageBasePath.Replace(@"/", @"\") + ImageInfo.Value.SpritePath; image.ZoomScale = ImageInfo.Value.ZoomScale; spriteImages.Add(image); } return(bRet); }
public bool GetSpriteImage(string path, out AtlasSpriteImage spriteImage) {//获取指定文件名的小图 bool bRet = false; if (path == null) { spriteImage = null; return(false); } // string tempPath = path.Substring(path.IndexOfAny(ImageRelativePath.ToCharArray()) + ImageRelativePath.Length); spriteImage = null; //查询目标小图 foreach (var sprite in spriteImages) { if (sprite.Path == path) { spriteImage = sprite; bRet = true; break; } } return(bRet); }
public bool GetSpriteImage(string path, out AtlasSpriteImage spriteImage) {//获取指定小图 bool bRet = false; spriteImage = null; if (m_Project != null) { bRet = m_Project.GetSpriteImage(path, out spriteImage); } return(bRet); }
public bool AddSpriteImage(string path) {//向工程中添加小图 bool bRet = true; if (string.IsNullOrEmpty(path)) { ProjectFailedType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH; return(false); } AtlasSpriteImage spriteImage = new AtlasSpriteImage(); //首次添加时缩放比例默认是1 spriteImage.ZoomScale = 1f; if (CheckSpriteImagePath(path)) {//路径合法 //spriteImage.Path = path.Substring(ImageRelativePath.Length); spriteImage.Path = path; spriteImage.Name = path.Substring(path.LastIndexOfAny(new char[] { '/', '\\' }) + 1); foreach (var sprite in spriteImages) { if (sprite.Path == spriteImage.Path) { //更新错误类型 ProjectFailedType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITE_EXIST; bRet = false; break; } } } else {//路径非法 //更新错误类型 ProjectFailedType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH; bRet = false; } if (bRet) { //添加小图 spriteImages.Add(spriteImage); IsModify = true; bRet = true; } return(bRet); }
public PROJECT_ERROR_TYPE ModifyRefTableAfterAddSprite(AtlasSpriteImage[] spriteImageTable) { PROJECT_ERROR_TYPE errorType = PROJECT_ERROR_TYPE.PROJECT_ERROR_NONE; AtlasSpriteImage tempSprite = null; ReferenceInfo refInfo = null; if (null == spriteImageTable) { return(PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH); } foreach (var spriteItem in spriteImageTable) { if (!FindSprite(spriteItem.Path, ref tempSprite)) { continue; } //更新Sprite反依赖 tempSprite.ReferenceTable = spriteItem.ReferenceTable; //更新Atlas反依赖 foreach (var assetItem in spriteItem.ReferenceTable) { if (!FindRefAssetFile(assetItem, ref refInfo)) { ReferenceInfo newInfo = new ReferenceInfo(); newInfo.ReferenceFilePath = assetItem; newInfo.ReferencingSprite.Add(System.IO.Path.GetFileNameWithoutExtension(spriteItem.Path)); ReferenceTable.Add(newInfo); } else { if (!FindRefAssetSprite(assetItem, System.IO.Path.GetFileNameWithoutExtension(spriteItem.Path))) { refInfo.ReferencingSprite.Add(System.IO.Path.GetFileNameWithoutExtension(spriteItem.Path)); } } } } return(errorType); }
public PROJECT_ERROR_TYPE GetSpriteImageZoom(string spritePath, out float scaleFactor) { PROJECT_ERROR_TYPE errorType = PROJECT_ERROR_TYPE.PROJECT_ERROR_NONE; scaleFactor = 0f; if (string.IsNullOrEmpty(spritePath)) { return(PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH); } AtlasSpriteImage spriteImage = null; if (GetSpriteImage(spritePath, out spriteImage)) { scaleFactor = spriteImage.ZoomScale; } return(errorType); }
public Texture2D LoadSpriteImage(string path) {//载入小图资源 if (null == m_Project) { return(null); } AtlasSpriteImage spriteImage = null; m_Project.GetSpriteImage(path, out spriteImage); if (null == spriteImage) { return(null); } Texture2D retTex = UIAtlasTempTextureManager.GetInstance().LoadTexture(path, m_Project.Path, spriteImage.ZoomScale); return(retTex); }
public PROJECT_ERROR_TYPE AddSpriteImage(AtlasSpriteImage spriteImage) { PROJECT_ERROR_TYPE errorType = PROJECT_ERROR_TYPE.PROJECT_ERROR_NONE; if (null == spriteImage) { return(PROJECT_ERROR_TYPE.PROJECT_ERROR_UNKNOWN); } do { if (CheckSpriteImagePath(spriteImage.Path)) { foreach (var sprite in spriteImages) { if (sprite.Path == spriteImage.Path) { //更新错误类型 errorType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITE_EXIST; break; } } if (IsProjectFailed(errorType)) { break; } AtlasSpriteImage newSpriteImage = spriteImage; //添加小图 spriteImages.Add(newSpriteImage); IsModify = true; } else { errorType = PROJECT_ERROR_TYPE.PROJECT_ERROR_SPRITEIMAGE_PATH; break; } } while (false); return(errorType); }
//public bool PreViewAtlastexture(Texture2D tex, Texture2D[] imgs, out Texture2D outTex) //{//获取预览Atals // outTex = null; // DefaultTexturePackagingStrategy maker = new DefaultTexturePackagingStrategy(); // //打包纹理 // if(maker.Pack(tex, imgs, null)) // { // outTex = tex; // } // return true; //} //public bool MakeAtlasTexture(Texture2D tex, Texture2D[] imgs) //{//生成Atlas Png // string newPath = null; // bool bRet = false; // if ((atlasSavePath == null) || (name == null)) // { // return false; // } // DefaultTexturePackagingStrategy maker = new DefaultTexturePackagingStrategy(); // //打包纹理 // if(maker.Pack(tex, imgs, null)) // { // if(tex == null) // { // return false; // } // //创建png文件 // byte[] bytes = tex.EncodeToPNG(); // newPath = atlasSavePath + name + ".png"; // UniversalEditorUtility.MakeFileWriteable(newPath); // System.IO.File.WriteAllBytes(newPath, bytes); // bytes = null; // bRet = true; // } // return bRet; //} //public void MakeAtlasPrefab(string outputPath) //{//生成Atlas prefab // if ((outputPath == null) || (!outputPath.Contains(".prefab"))) // { // return; // } // GameObject go = AssetDatabase.LoadAssetAtPath(outputPath, typeof(GameObject)) as GameObject; // string matPath = outputPath.Replace(".prefab", ".mat"); // // Try to load the material // Material mat = AssetDatabase.LoadAssetAtPath(matPath, typeof(Material)) as Material; // // If the material doesn't exist, create it // if (mat == null) // { // Shader shader = Shader.Find(NGUISettings.atlasPMA ? "Unlit/Premultiplied Colored" : "Unlit/Transparent Colored"); // mat = new Material(shader); // // Save the material // AssetDatabase.CreateAsset(mat, matPath); // AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); // // Load the material so it's usable // mat = AssetDatabase.LoadAssetAtPath(matPath, typeof(Material)) as Material; // } // // Create a new prefab for the atlas // Object prefab = (go != null) ? go : PrefabUtility.CreateEmptyPrefab(outputPath); // if (go == null) // { // // Create a new game object for the atlas // string atlasName = outputPath.Replace(".prefab", ""); // atlasName = atlasName.Substring(outputPath.LastIndexOfAny(new char[] { '/', '\\' }) + 1); // go = new GameObject(atlasName); // go.AddComponent<UIAtlas>().spriteMaterial = mat; // // Update the prefab // PrefabUtility.ReplacePrefab(go, prefab); // GameObject.DestroyImmediate(go); // AssetDatabase.SaveAssets(); // AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); // } // // Select the atlas // go = AssetDatabase.LoadAssetAtPath(outputPath, typeof(GameObject)) as GameObject; // NGUISettings.atlas = go.GetComponent<UIAtlas>(); // Selection.activeGameObject = go; // List<UIAtlasMaker.SpriteEntry> sprites = CreateSprites(UIAtlasTempTextureManager.GetInstance().GetTextureCacheSprite()); // UIAtlasMaker.UpdateAtlas(NGUISettings.atlas, sprites); ; // AssetDatabase.SaveAssets(); // AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); // NGUIEditorTools.UpgradeTexturesToSprites(NGUISettings.atlas); // NGUIEditorTools.RepaintSprites(); //} //static public List<UIAtlasMaker.SpriteEntry> CreateSprites(List<Texture> textures) //{ // List<UIAtlasMaker.SpriteEntry> list = new List<UIAtlasMaker.SpriteEntry>(); // foreach (Texture tex in textures) // { // Texture2D oldTex = NGUIEditorTools.ImportTexture(tex, true, false, true); // if (oldTex == null) oldTex = tex as Texture2D; // if (oldTex == null) continue; // // If we aren't doing trimming, just use the texture as-is // if (!NGUISettings.atlasTrimming && !NGUISettings.atlasPMA) // { // UIAtlasMaker.SpriteEntry sprite = new UIAtlasMaker.SpriteEntry(); // sprite.SetRect(0, 0, oldTex.width, oldTex.height); // sprite.tex = oldTex; // if (oldTex.name.EndsWith("zoomed")) // { // sprite.name = oldTex.name.Substring(0, oldTex.name.Length - "zoomed".Length); // } // else // { // sprite.name = oldTex.name; // } // sprite.temporaryTexture = false; // list.Add(sprite); // continue; // } // // If we want to trim transparent pixels, there is more work to be done // Color32[] pixels = oldTex.GetPixels32(); // int xmin = oldTex.width; // int xmax = 0; // int ymin = oldTex.height; // int ymax = 0; // int oldWidth = oldTex.width; // int oldHeight = oldTex.height; // // Find solid pixels // if (NGUISettings.atlasTrimming) // { // for (int y = 0, yw = oldHeight; y < yw; ++y) // { // for (int x = 0, xw = oldWidth; x < xw; ++x) // { // Color32 c = pixels[y * xw + x]; // if (c.a != 0) // { // if (y < ymin) ymin = y; // if (y > ymax) ymax = y; // if (x < xmin) xmin = x; // if (x > xmax) xmax = x; // } // } // } // } // else // { // xmin = 0; // xmax = oldWidth - 1; // ymin = 0; // ymax = oldHeight - 1; // } // int newWidth = (xmax - xmin) + 1; // int newHeight = (ymax - ymin) + 1; // if (newWidth > 0 && newHeight > 0) // { // UIAtlasMaker.SpriteEntry sprite = new UIAtlasMaker.SpriteEntry(); // sprite.x = 0; // sprite.y = 0; // sprite.width = oldTex.width; // sprite.height = oldTex.height; // // If the dimensions match, then nothing was actually trimmed // if (!NGUISettings.atlasPMA && (newWidth == oldWidth && newHeight == oldHeight)) // { // sprite.tex = oldTex; // if (oldTex.name.EndsWith("zoomed")) // { // sprite.name = oldTex.name.Substring(0, oldTex.name.Length - "zoomed".Length); // } // else // { // sprite.name = oldTex.name; // } // sprite.temporaryTexture = false; // } // else // { // // Copy the non-trimmed texture data into a temporary buffer // Color32[] newPixels = new Color32[newWidth * newHeight]; // for (int y = 0; y < newHeight; ++y) // { // for (int x = 0; x < newWidth; ++x) // { // int newIndex = y * newWidth + x; // int oldIndex = (ymin + y) * oldWidth + (xmin + x); // if (NGUISettings.atlasPMA) newPixels[newIndex] = NGUITools.ApplyPMA(pixels[oldIndex]); // else newPixels[newIndex] = pixels[oldIndex]; // } // } // // Create a new texture // sprite.temporaryTexture = true; // if (oldTex.name.EndsWith("zoomed")) // { // sprite.name = oldTex.name.Substring(0, oldTex.name.Length - "zoomed".Length); // } // else // { // sprite.name = oldTex.name; // } // sprite.tex = new Texture2D(newWidth, newHeight); // sprite.tex.SetPixels32(newPixels); // sprite.tex.Apply(); // // Remember the padding offset // sprite.SetPadding(xmin, ymin, oldWidth - newWidth - xmin, oldHeight - newHeight - ymin); // } // list.Add(sprite); // } // } // return list; //} private bool FindSprite(string spritePath, ref AtlasSpriteImage spriteImage) { bool bRet = false; spriteImage = null; if (string.IsNullOrEmpty(spritePath)) { return(false); } foreach (var spriteItem in spriteImages) { if (spritePath == spriteItem.Path) { spriteImage = spriteItem; bRet = true; } } return(bRet); }
static void OnSpriteInspector(EditorControl c, object target) {//小图属性窗口显示 int w, h; string oldStr = null; string SpriteName = null; if ((m_spriteListView == null) || (m_spriteListView.LastSelectItem < 0)) { return; } ListCtrlItem deleteItem = m_spriteListView.Items[m_spriteListView.LastSelectItem]; SpriteName = deleteItem.tooltip; GUILayout.Space(20f); GUILayout.BeginHorizontal(); GUILayout.Label("宽高比", GUILayout.Width(60f)); GUILayout.TextField(m_aspecet.ToString(), GUILayout.Width(150)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("宽度", GUILayout.Width(60f)); GUI.SetNextControlName("宽度"); oldStr = m_spriteWidthStr; m_spriteWidthStr = GUILayout.TextField(m_spriteWidthStr, GUILayout.Width(150)); if ((GUI.GetNameOfFocusedControl() == "宽度") && (oldStr != m_spriteWidthStr)) { int.TryParse(m_spriteWidthStr, out w); h = (int)(w / m_aspecet); m_spriteHeightStr = h.ToString(); } GUILayout.Label("pix", GUILayout.Width(50f)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("高度", GUILayout.Width(60f)); GUI.SetNextControlName("高度"); oldStr = m_spriteHeightStr; m_spriteHeightStr = GUILayout.TextField(m_spriteHeightStr, GUILayout.Width(150)); if ((GUI.GetNameOfFocusedControl() == "高度") && (oldStr != m_spriteHeightStr)) { int.TryParse(m_spriteHeightStr, out h); w = (int)(h * m_aspecet); m_spriteWidthStr = w.ToString(); } GUILayout.Label("pix", GUILayout.Width(50f)); GUILayout.EndHorizontal(); if (Event.current.keyCode == KeyCode.Return && Event.current.type == EventType.Used) { if (GUI.GetNameOfFocusedControl() == "高度" || GUI.GetNameOfFocusedControl() == "宽度") { AtlasSpriteImage spriteImage = null; AtlasImageZoomCommand cmd = null; Texture2D tex = null; int.TryParse(m_spriteWidthStr, out w); int.TryParse(m_spriteHeightStr, out h); cmd = new AtlasImageZoomCommand(); UIAtlasEditorModel.GetInstance().GetSpriteImage(SpriteName, out spriteImage); tex = UIAtlasEditorModel.GetInstance().GetSpriteTexture(SpriteName); if (tex == null) { return; } cmd.m_oldScaleFactor = spriteImage.ZoomScale; cmd.m_newScaleFactor = (float)w / (float)tex.width; cmd.m_SpriteName = SpriteName; EditorCommandManager.GetInstance().Add(cmd); m_bIsOperateSaved = false; RegisterUndo("Zoom Image"); } } //RequestRepaint(); }