/// <summary> /// 预先加载atlas /// </summary> /// <param name="atlasNames"></param> public static void PreLoad(string[] atlasNames) { AtlasCollection ac = null; for (int i = 0; i < atlasNames.Length; ++i) { ac = GetAtlas(atlasNames[i]); } ac = null; }
public static Sprite GetSprite(string atlasName, string spriteName) { Sprite ret = null; AtlasCollection atlas = GetAtlas(atlasName); if (atlas != null) { ret = atlas.Find(spriteName); } atlas = null; return(ret); }
static AtlasCollection createAsset(string atlasName) { string prefabPath = AtlasCollectionsDir + "/" + atlasName + ".asset"; prefabPath = prefabPath.Substring(prefabPath.IndexOf("Assets")); AtlasCollection scriptableObj = ScriptableObject.CreateInstance <AtlasCollection>(); UnityEditor.AssetDatabase.CreateAsset(scriptableObj, prefabPath); // UnityEditor.AssetDatabase.SaveAssets(); // UnityEditor.AssetDatabase.Refresh(); return(AssetDatabase.LoadAssetAtPath <AtlasCollection>(prefabPath)); }
/// <summary> /// (慎用)保留atlas的资源引用,使得Resource.UnloadUnusedAssets不能将其卸载 /// </summary> /// <param name="atlasNames"></param> public static void Cache(string[] atlasNames) { for (int i = 0; i < atlasNames.Length; ++i) { if (!m_cachedAtlas.ContainsKey(atlasNames[i])) { AtlasCollection ac = GetAtlas(atlasNames[i]); if (ac != null) { m_cachedAtlas.Add(atlasNames[i], ac); ac = null; } } } }
public static void ExportAtlasPfb() { if (!Directory.Exists(SpritesDir)) { EditorUtility.DisplayDialog("提示", "图集图片所在目录不存在", "知道了"); return; } EditorUtility.DisplayProgressBar("", "删除之前的AtlasCollection文件", 0f); Dictionary <string, AtlasCollection> pres = new Dictionary <string, AtlasCollection>(); if (Directory.Exists(AtlasCollectionsDir)) { Directory.Delete(AtlasCollectionsDir, true); AssetDatabase.SaveAssets(); } Directory.CreateDirectory(AtlasCollectionsDir); EditorUtility.DisplayProgressBar("", "Rebuild图集", 0.2f); //Rebuild Packer.RebuildAtlasCacheIfNeeded(EditorUserBuildSettings.activeBuildTarget, false); EditorUtility.DisplayProgressBar("", "重新生成图集的AtlasCollection文件", 0.5f); //收集数据 #region c#方法获得文件 /* * DirectoryInfo rootDirInfo = new DirectoryInfo(atlasDir); * foreach (FileInfo pngFile in rootDirInfo.GetFiles(".png", SearchOption.AllDirectories)) * { * string allPath = pngFile.FullName; * string assetPath = allPath.Substring(allPath.IndexOf("Assets")); */ #endregion string[] atlasSpritePath = new string[] { SpritesDir.Substring(SpritesDir.IndexOf("Assets")) }; string[] result = AssetDatabase.FindAssets(format, atlasSpritePath); for (int i = 0; i < result.Length; ++i) { string assetPath = AssetDatabase.GUIDToAssetPath(result[i]); Sprite sprite = AssetDatabase.LoadAssetAtPath <Sprite>(assetPath); if (sprite == null || !sprite.packed) { continue; } Texture2D tmp; string atlasName; Packer.GetAtlasDataForSprite(sprite, out atlasName, out tmp); //没有相应的图集问价AtlasCollection,则新建一个 if (!pres.ContainsKey(atlasName)) { AtlasCollection atl = createAsset(atlasName); pres.Add(atlasName, atl); } pres[atlasName].sprites.Add(sprite); } EditorUtility.DisplayProgressBar("", "保存资源", 0.8f); //保存 foreach (AtlasCollection obj in pres.Values) { EditorUtility.SetDirty(obj); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); EditorUtility.ClearProgressBar(); }