示例#1
0
    /// <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;
    }
示例#2
0
    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);
    }
示例#3
0
    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));
    }
示例#4
0
 /// <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;
             }
         }
     }
 }
示例#5
0
    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();
    }